Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
具体データやQVWを提示せず恐縮なのですが、また教えてください。
ある①QVWを作っておりユーザ解放しています。但しこのQVWの中身のデータが
数億件あり非常に重くなっています。今回新型コロナによる在宅勤務の絡みで
新規のユーザが検索で利用することに急遽決まりました。
但しこの新規のユーザは一般ユーザであるため中身のデータはせいぜい1000件
くらいのものだけ検索出来ればよく、その範囲も予めわかっています。
①QVWはスクリプトを修正して再ロードするにもデータが多すぎて丸1日かかり
ます。ですので②QVWを新たに作成して Binary ①QVWでデータコピーして
residentで対象を絞り 不要なロードデータを捨てたいのですが
resident loadはほとんど使ったことがなく Whereなど併用して現在のテーブル
を絞り込めるこのなのでしょうか?
Ctrl+T の現在のテーブルイメージ
TABLE1─┐ ┌─ TABLE3
$2 SYN TABLE
TABLE2─┘ ユーザ名 └─ TABLE4
上記のユーザ名を絞り込めれば、各TABLEが全てコンパクトになる
以上、宜しくお願い致します
なお、ファイル内で絞ったデータだけ残して保存するだけであれば、最初に記載した
[ファイル] - [データ削除] - [現在の除外値を削除]
を実行後、別ファイル名で保存すれば大丈夫ですよ。
ただこの場合は、別ファイルで保存したファイルも、リロードしてしまうと元に戻ってしまいますが。
[ファイル] - [データ削除] - [現在の除外値を削除]
この意味がよくわかっていませんでした!!!!! これです!すごい! QlikView天才
いまのいままで、この存在を知りませんでした!
こんな便利な機能があったんですね!!! あまりにデータが多くて重くて困っているユーザに
これで簡単にデータ削除したライトバージョンで臨機応変に見せられます
新型コロナの影響で、みんな在宅勤務で一斉にだれもかれもがアクセスしてくるため
特定のエンドユーザには本当に必要な軽量版QVを見せたかったのですが
あたらめてリドードするには1昼夜かかるようなデータ量なので、なんとかデータを
簡単に消せないか悩んでいました
送って頂いたQVの方のロードスクリプト構文もよく勉強してみます!有難うございました!
STORE文って、ご存知ですか?
それと、QVで数億件取り込むくらいで、1昼夜かかると言う事は通常ありえないのですが(サーバースペックにもよりますが)、最初に記載されていたテーブル構成を見るとシンセティックテーブルが作成されてしまっているのが原因ではないかと思います。
ロードスクリプトの進捗画面で、最後に
$Syn 1 = 項目1 +項目2
$Syn 2 = 項目1 +項目2 +項目3
みたいなのができて、この部分で時間かかってませんか?
ユーザに公開するのはvmware環境のサーバを使っておりますが、その中で自動リロードさせるのは会計系や人事系の結構小さな数のレコードです。せいぜい1000万件くらいでしょうか
その他にインフラ系各種ログ集計や解析をして業務活用しており、それはQVS(QVWSも同居)のサーバーではリロードさせず、ゲーム用上位機種のPC(i9-9900X 10コア20スレッド)でリロードさせています。MEMは128GBです
それを使ってインフラログのロード&解析処理をしており Proxy、dhcp、Ad、VPNアクセスログ、Webプロキシなどなど、かなりすさまじい量のログファイルを扱っています(csv形式)これらを1か月分ロードして、ipやmac等で紐付けてゆき、様々な解析に使っています。CPU100%状態でリロード処理に1昼夜かかります。
StoreやDropなどは知っていますが、residentやLET SET、autogen等のくるくるループさせるような処理はあまり使っておらず CSVやQVDをロードしては下に下に流すような単純コーディングがメインです (^_^;)
1USERあたり1000件くらいと言う事でしたので、新規ユーザーにみてもらいたいデータが決まっているようであれば、元の①.qvwのスクリプトの中に、ユーザー単位でCSV出力するスクリプトを記載すると、新規ユーザーへライセンスを渡さなくてもCSVで見てもらえるので、ライトなユーザーや一時的に一部データのみを利用するユーザーにはこのような方法で逃げるのもありだと思います。
リロード時間の件は、私は利用当初シンセティックキーが出来るようなテーブル構成をしていて、リロードにかなり時間を要していましたが、以下のような方法をとる事で、かなり短縮できました。
①合成キーを用意して、シンセティックキーをつくらないようにする
たとえば、日付(2020/4/1)とCD(1001)のふたつがリレーションに利用される状態の場合は、ふたつを合わせてしまって'202004011001'という合成キーにしてしまいます。
こうすると、リロードの恩恵だけでなく、ファイル内の動作も速くなります。
②過去データはQVD化して保存し、更新が発生する期間のみDBやCSVなどから取得する。
とくにCSVはファイル数が多くなるとデータ量に対して読込に時間を要するので、取得先フォルダからデータを取得してQVD化したら、別のアーカイブフォルダへ移すといった運用をすると、かなり速度が改善されます。
とくにQVDの読込速度は強烈です!DBからの読込速度と比べると、10~100倍の早さです。
その他、ファイル内のパフォーマンスをあげる場合、リレーションキーに利用している項目をAutoNumber関数を使って数値の連番に置き換えると、これも効果があります。ファイルサイズも少し小さくなります。
ただデメリットもあって、リロード時間が増えます。億件のデータを利用している場合は、やめた方が良いケースもありますので、このあたりはリロード時間とファイルの動作パフォーマンスのバランスで判断するしかないです。
DBやアクセスなど、データの保存先でも処理が出来るデータ等であれば、ダイレクトディスカバリーという方法もあって、ファイル内にはデータを取り込まずに、期間やCDなど、データを検索する情報のみ取得しておいて、ユーザーがリストボックスで絞り込んだ際に、直接DBへデータを見に行って計算処理を行うといった事も可能です。こうする事で、常にタイムリーな情報を使う事が可能です。
ただこの場合の処理は、QVではなく取得先のDBのパフォーマンスに影響を受けるので、場合によっては処理が遅くなるといったデメリットもありますが。。。
有難うございます。参考にさせて頂きます。QlikViewは素晴らしい製品だとつくずく思いますので、もっとスクリプト等勉強して中級上級に進みたいと思います。QV一つで昔で言うメインフレームのバッチ処理と同じものが出来てしまいますよね
今日は少し暇だったので、自己学習のため、リロードを実行すると、ロード終了後に自動で
① 「ユーザー名」選択
② [ファイル] - [データの削除] - [現在の除外値を削除]
を実行するトリガーを用意してみました。
「USER3.qvw」を開いてリロードを実行すると、「元ファイル.qvw」をバイナリロードした後、’USER3'のデータだけ残して他は削除されるようになっています。
(実装先:[設定]-[ドキュメントプロパティ]-[トリガー]-[OnPostReload]-[アクションの編集])
ユーザー側がバイナリロードで取得するQVWファイルへのアクセス権限があれば、配布後はユーザー側で必要な時に更新してもらうと言った運用が可能になると思います。
サンプルではファイル名を使って絞り込むユーザー名を指定させていますが、ユーザー名がOSのユーザー名と同じであれば、トリガーの中の「ユーザー名」に設定してある[検索文字列]の数式を
=SubField(OSUser(),'\',2)
に変更すると、ファイル名に関係なく、OSのユーザー名を選択するように出来ます。
参考までに。
有難うございます!勉強します! ちなみに今、やろうと思いついたらよくわからないことが出てきたので別スレッドで質問します!