5

Hive のマルチインサートで問題が発生しています

FROM staged_employees se
INSERT INTO TABLE us_employees
    AS SELECT * WHERE se.cnty = 'US'
INSERT INTO TABLE ca_employees
    AS SELECT * WHERE se.cnty = 'CA'
...

私の知る限り、マルチインサートは IF ... ELSE ... コンストラクトではありませんが、IF ... ELSE ... コンストラクトにすることは可能ですか?

4

4 に答える 4

1

HQL は条件付きロジックをサポートしていません。インサートの分割に関するあなたの質問に対する文字通りの答えは次のとおりです。

INSERT INTO TABLE us_employees
SELECT * 
FROM staged_employees se
WHERE se.cnty = 'US'

INSERT INTO TABLE ca_employees
SELECT *
FROM staged_employees se
WHERE se.cnty = 'CA'

staged_employeesクエリを分割することで達成できるのは、テーブルからすべてのデータを 2 回読み取ることだけです。また、クラスターの他のユーザーを非常に苛立たせる可能性があります。

于 2013-01-23T00:38:34.473 に答える
0

古い質問でしたが、下の画像は、 Edward Capriolo、Dean Wampler、Jason Rutherglenによる本Programming Hiveの第 5 章 76 ページから役立つかもしれません。

複数の挿入ステートメントを記述するためのハイブ コマンドのスニペット

OVERWRITE DIRECTORY '/'tmp/or_employeesの画像をINTO TABLE us_employees

よろしくお願いします

于 2020-10-13T18:28:39.460 に答える
-1

IF...ELSE ...construct,OK,CASE WHEN を使用してそれを行うことができます。上記のコードは次のようになります。

INSERT INTO TABLE us_employees
SELECT * 
FROM staged_employees se
WHERE cnty in ('US','CA')
于 2017-05-27T08:27:59.327 に答える