1

Spark SQL を使用して WSO2 DAS でバッチ分析を実行するときに、次のクエリを実行しようとしました。テーブル「First」、「Middle」、および「Third」を結合して、テーブル「All_three」に書き込む必要があります。

INSERT OVERWRITE TABLE All_three 
SELECT SYMBOL, VOLUME FROM First 
UNION 
SELECT SYMBOL, VOLUME FROM Middle 
UNION 
SELECT SYMBOL, VOLUME FROM Third;

このクエリを実行すると、WSO2 DAS に次のエラーが表示されます。

ERROR: [1.79] failure: ``limit'' expected but `union' found INSERT OVERWRITE TABLE X1234_All_three SELECT SYMBOL, VOLUME FROM X1234_First UNION SELECT SYMBOL, VOLUME FROM X1234_Middle UNION SELECT SYMBOL, VOLUME FROM X1234_Third ^ 

私の知る限り、UNIONでLIMITを使用する必要はありません。SELECT クエリを括弧で囲むことも試みられましたが、うまくいきませんでした。ここで何が間違っていますか?前もって感謝します!

4

2 に答える 2

1

同じ問題がありました。

各行の最後に空白があることを確認してください。

その理由は、SSMS や他のクエリ エディターのように \n を空白と見なしていないためです。

したがって、空白なしでクエリを読み取ります。したがって、SELECT * FROM FirstUNION のように読みますが、SELECT * FROM First UNION とは異なります。

私の問題は解決しました。これがあなたにも役立つことを願っています。

于 2016-04-12T10:22:06.573 に答える
0

ここで言及したクエリには問題があります。以下のようにクエリを変更してください。

INSERT OVERWRITE TABLE All_three select * from ( SELECT SYMBOL, VOLUME FROM First UNION SELECT SYMBOL, VOLUME FROM Middle UNION SELECT SYMBOL, VOLUME FROM Third ) temp;

実際にここで行っているのは、ユニオンの結果をtempという一時データ要素にラップし、そこからすべてを選択することです。Spark-SQL パーサーは、挿入クエリで 1 つの選択要素のみを受け取り、選択クエリの最後に制限 (利用可能な場合) を期待します。したがって、後続の select ステートメントを 1 つの select 要素にラップする必要があります。これで問題が解決することを願っています。

于 2016-05-06T11:50:18.043 に答える