

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
大容量のQVWをバイナリーで読んで、中身のレコードを絞って小さくしたい
具体データやQVWを提示せず恐縮なのですが、また教えてください。
ある①QVWを作っておりユーザ解放しています。但しこのQVWの中身のデータが
数億件あり非常に重くなっています。今回新型コロナによる在宅勤務の絡みで
新規のユーザが検索で利用することに急遽決まりました。
但しこの新規のユーザは一般ユーザであるため中身のデータはせいぜい1000件
くらいのものだけ検索出来ればよく、その範囲も予めわかっています。
①QVWはスクリプトを修正して再ロードするにもデータが多すぎて丸1日かかり
ます。ですので②QVWを新たに作成して Binary ①QVWでデータコピーして
residentで対象を絞り 不要なロードデータを捨てたいのですが
resident loadはほとんど使ったことがなく Whereなど併用して現在のテーブル
を絞り込めるこのなのでしょうか?
Ctrl+T の現在のテーブルイメージ
TABLE1─┐ ┌─ TABLE3
$2 SYN TABLE
TABLE2─┘ ユーザ名 └─ TABLE4
上記のユーザ名を絞り込めれば、各TABLEが全てコンパクトになる
以上、宜しくお願い致します
- Tags:
- Group_Discussions
- « Previous Replies
-
- 1
- 2
- Next Replies »
Accepted Solutions


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
なお、ファイル内で絞ったデータだけ残して保存するだけであれば、最初に記載した
[ファイル] - [データ削除] - [現在の除外値を削除]
を実行後、別ファイル名で保存すれば大丈夫ですよ。
ただこの場合は、別ファイルで保存したファイルも、リロードしてしまうと元に戻ってしまいますが。


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
上記件ですが、テーブル構成は同じで、単純に「ユーザー名」のみを絞りたいという事ですか?
それとも、テーブルも必要テーブルのみに絞り込んだ方が良いですか?


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
テーブルや画面はまったく同じでいいんです
見る必要のないユーザを全部削除してしまいたい(それによって他のTABLEにもキーでつながっているものを減らしたい)という意図です
よろしくお願いします


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
記載されていたテーブル構成ように、全てのテーブルにWHERE条件となる「ユーザー名」が存在する場合は、添付ファイルのような方法で簡単に出来ますが、そうでない場合は、テーブル名に応じて絞り込み方法が変わってくるので、それらを指示するような台帳が別途必要になってきます。
ここでは頂いたテーブルレイアウトの場合に対応する方法について、以下に流れを記載しておきます。
1.「①.qvw」は、全てのデータが存在する、元となるファイルです。
2.「①.qvw」を開いて、絞り込みたい「ユーザー名」でファイルを保存し、ユーザー用ファイルを用意します。
ここでは例として、「USER2.qvw」として保存します。
これでファイル内のオブジェクトは、ユーザー用ファイルにそのまま残ります。
3.「ロードスクリプトの編集」を開き、「Main」タブのスクリプトをコメントアウトし、「USER別」タブのスクリプトを有効にし、リロードします。
以上で、USER2のデータだけになります。
その他の方法として、Tuyoshiさんの方で、手動で絞り込んでファイルを都度渡すのであれば、リストボックスで該当者の「ユーザー名」だけ選択した状態で、
[ファイル] - [データ削除] - [現在の除外値を削除]
を行う事で、選択した「ユーザー名」の除外値にあたるデータは削除されますので、削除後保存してお渡しすると良いかと思います。


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
スクリプトで不明点があれば、記載下さい。


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
有難うございます。頑張ってみさせて頂きます!!!(^^)/


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ロードスクリプトを見て、ちんぷんかんぷん?のまま、指示されているとおり
①.qvwを開いて User1だけを選択し その状態で USER2.qvwという別名で保管。
②USER2.qvwを開いて、ロードスクリプトのコメントアウトを解除してリロード
なんと User1だけのデータになりました
手品のようでびっくりしています 何故こういう動作が出来るのか?ちんぷんかんぷんです
Binary ①.qvw;
FOR i = 0 to NoOfTables()-1
テーブルリスト:
LOAD TableName($(i)) as テーブル名
AutoGenerate(1);
NEXT
再読込テーブル:
LOAD Concat(chr(39)&テーブル名&chr(39),',') as 再読込テーブルリスト
Resident テーブルリスト;
DROP Table テーブルリスト;
LET V_TableList = Peek('再読込テーブルリスト',0,'再読込テーブル');
DROP Table 再読込テーブル;
LET V_User = SubField(DocumentName(),'.',1);
FOR Each V_TableName in $(V_TableList)
LET V_TableName2 = '$(V_TableName)'&'_再読込';
NoConcatenate
$(V_TableName2):
LOAD *
Resident $(V_TableName)
Where ユーザ名='$(V_User)';
NEXT
DROP Tables $(V_TableList);
何故 私が選択したUser1以外、削除されるのでしょうか?
すみません 解説をお願いできれば幸いです


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
選択したUSER1ではなく、ファイル名のUSER2が残っていませんか?


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
? あ、ほんとだ、自分がUSER1を選択した状態で USER2.qvwとして別名保管した
そのDocumentName のUSER2 が残ってました
自分が選んだ選択ユーザと思ったら、違いました・・・
大容量のQVWを開いて、そこから絞り込みたいデータだけ選択した状態で 別名保管し
それを別のQVWからバイナリーロードすると 絞ったデータだけのテーブルになるのかと
一瞬びっくりしましたが そんなわけはないですよね
お時間ありましたらロードスクリプトの解説をしていただけますと助かります 特に中盤以降


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
「USER別」タブのスクリプト内に、説明差し込みました。
一度コメントアウトして、処理1から順に開放しながら、説明と一緒に、出来たテーブル、値を確認てもらうと理解しやすいと思います。

- « Previous Replies
-
- 1
- 2
- Next Replies »