質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

TreasureData

TreasureDataは、クラウド型データマネージメントサービスです。アプケーションログやセンサーデータといった時系列データの収集や保管、分析を容易に行うことが可能です。分析エンジンとしてPrestoの利用もでき、SQLで収集データをインタラクティブに分析できます。

Q&A

解決済

1回答

1303閲覧

treasuredataのworkflowで「複数のテーブルを結合に利用するとタイミングによってテーブルが空になる」問題を解決したい

theaaa

総合スコア9

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

TreasureData

TreasureDataは、クラウド型データマネージメントサービスです。アプケーションログやセンサーデータといった時系列データの収集や保管、分析を容易に行うことが可能です。分析エンジンとしてPrestoの利用もでき、SQLで収集データをインタラクティブに分析できます。

0グッド

0クリップ

投稿2018/06/25 09:05

前提・実現したいこと

treasuredataでworkflowを作成しています。

同じSQLなのにworkflowで実行すると「No result records to preview」になる原因が知りたいです。
(手動で実行すると期待する結果が出力される)

treasuredataに問い合わせたところ、
「複数のテーブルを結合に利用しているため、タイミングによって何処かのテーブルが空であったりJOINできない状態のデータとなる可能性がある。それにより今回のSQLも影響を受けて0件になることが考えられる」とのこと。

→この"タイミングによって"という部分、workflowの利用によって空になる原因はどこにあるのでしょうか?(digdag特有の挙動?)

発生している問題・エラーメッセージ

手動では問題なく出力されるSQLが、workflowの利用によって、結果がたまに0件となることが発生します。

下記のようにwithとinner joinを使用しています。
(SQLだけの問題なのか、workflowによる影響なのかがわかりません。)

該当のソースコード

sql

1with A as ( 2  〜〜〜〜〜〜 3 from B 4 inner join C 5 ON 〜〜〜〜〜〜 6 inner join D 7 ON 〜〜〜〜〜〜 8 inner join( 9 〜〜〜〜〜〜 10 ) ON 〜〜〜〜〜〜 11〜〜〜〜〜〜

試したこと

workflowではスプレットシートに結果を出力するようにしていますが、
スプレットシートへの出力以前の問題なので、今回は恐らく影響はないかと思います。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

treasuredataに問い合わせたところ、
「複数のテーブルを結合に利用しているため、タイミングによって何処かのテーブルが空であったりJOINできない状態のデータとなる可能性がある。それにより今回のSQLも影響を受けて0件になることが考えられる」とのこと。

問い合わせ時には、対処方法は示されなかったのですか?

回答が結合云々のタイミングという話であるなら、withやサブクエリーは使用せず、from句では単純な結合のみとしてみてはどうでしょうか。

追記

TreasureData Workflow (digdag)を使ってみた(超入門)[メモ]
TreasureData Workflowは、使ったことは無いのですが、上記を参考にすると、
Aの結果でテーブルを作成し、BのSQLはtest_aを参照するという事になるかと。
AもBもSQLなら、SQLを纏めれば良いのだと思います。

+task1: td>: queries/A.sql create_table: test_A +task2: td>: queries/B.sql create_table: test_B

投稿2018/06/25 09:22

編集2018/06/25 11:17
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

theaaa

2018/06/25 09:35

ありがとうございます! 対処法として提示された内容では、 「事前のデータ加工などの処理がある場合、workflowではそれが終わったあとに集計処理をするというような依存関係の設定もできる。データの加工と集計を一緒のタスクに組み込んで実行させるのも良いかも。」とのことでした。 workflow上というよりは、sqlに問題があるということですよね。 withやサブクエリを使わない書き方で試してみます。
sazi

2018/06/25 09:45

その回答内容なら、ワークフローが複数のタスクで構成されていて、A→Bであるとき、Aが完了していない状態で、Bが実行されるという事だと思います。 この場合は、回答にあるように、AとBの依存関係を設定するか、AとBを一つのタスクにするという対処だと思います。
theaaa

2018/06/25 09:53

なるほど! 現状、タスクAとタスクBの間に関係はなく、異なる内容になっています。 その上でAとBを1つのタスクにするのでしょうか? イメージでは、「AとBを完全に切り離したいから、Aが完全に完了してからBを実行してね」という設定をするだと考えていたのですが...。(これが「AとBの依存関係を設定する」なのでしょうか?)
theaaa

2018/06/25 09:58

workflowとしては下記のように設定していますが、 「Aを実行し、それが完了した時にBを実行する」で合っていますよね? ここの処理の流れを1つにするということでしょうか? ``` +task1: td>: queries/A +task2: td>: queries/B ```
sazi

2018/06/25 10:00

Aが完了してからBという設定が依存関係に関する設定です。 Aの処理の次にBの処理を行うというプログラムにするのが、一つのタスクにするという事です。
theaaa

2018/06/25 11:03

ありがとうございます。 理解が深まりました。 他のワークフローも関係してきそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問