Skip to content

Instantly share code, notes, and snippets.

@eiichi-worker
Last active March 18, 2017 03:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiichi-worker/b9c71a547af89e8c0423470b7fcd2f71 to your computer and use it in GitHub Desktop.
Save eiichi-worker/b9c71a547af89e8c0423470b7fcd2f71 to your computer and use it in GitHub Desktop.
日記_digdagとHiveで詰まる

digdagとTDの組わせでhiveのクエリ結果をinsertしようとして詰まる。

スタンダードなクエリなら問題ないが、WITHとか使ってるとうまくクエリが動かない。
理由は、INSERT INTO TABLE result が頭に挿入され WITHと喧嘩するから。
この場合は、クエリ内にINSERTと書いて回避する。

うごかない

test.dig

+insert_test:
  td>: test.hive.sql
  engine: hive
  insert_into: result

test.hive.sql

WITH
tmp_log AS(
  SELECT *
  FROM test.log
)
SELECT *
  FROM tmp_log
;

これを実行すると下のクエリとして実行されてしまう。
※ 頭にINSERTが入る。。

INSERT INTO TABLE `result`

WITH
tmp_log AS(
  SELECT *
  FROM test.log
)
SELECT *
  FROM tmp_log
;

こうなる。。。実行時にエラー。。。悲しい。

うごく

test.dig

+insert_predict:
  td>: test.hive.sql
  engine: hive

test.hive.sql

WITH
tmp_log AS(
  SELECT *
  FROM test.log
)
INSERT INTO TABLE `result`
SELECT *
  FROM tmp_log
;

ベストソリューション

手動でINSERTを書いてもいいがもっといいのがあった。 DIGDAG_INSERT_LINE というコメントを入れるとその箇所にINSERT分が挿入される!

-- DIGDAG_INSERT_LINE

test.dig

+insert_test:
  td>: test.hive.sql
  engine: hive
  insert_into: result

test.hive.sql

WITH
tmp_log AS(
  SELECT *
  FROM test.log
)
-- DIGDAG_INSERT_LINE
SELECT *
  FROM tmp_log
;

WITH
tmp_log AS(
  SELECT *
  FROM test.log
)
INSERT INTO TABLE `result`
SELECT *
  FROM tmp_log
;

こうなる!!! 素敵!!

@fujimoto-pb
Copy link

fujimoto-pb commented Mar 17, 2017

-- DIGDAG_INSERT_LINE
という魔法のコメントが有るらしい。。。
それで書き直した

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment