問題タブ [sql-null]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 左結合内の左結合
テーブルから値を取得する際に問題があります。
私はこのようなものが必要です
テーブル A と B が結合され、テーブル B と C も結合されます。テーブル A は、テーブル B からの 1 つまたはゼロ以上の値を持つことができます。テーブル C からの値についても同じ状況です。
テーブル B に対してテーブル A で左結合を実行し、テーブル C に対してテーブル B でその左結合を実行する必要があります。
テーブルAとBから左結合を試みましたが、その左結合内で左結合を実行する方法がわかりません。
それは可能ですか?その構文はどのようになりますか?
編集:データは次のようになります
sql - HDP、Hive、Lateral ビュー、および null: 行が消える
hdp 3.1.0 から 3.1.4 にアップグレードしてから、Hive で理解できない問題が発生しました。ここでは ORC トランザクション テーブルのみを使用していることに注意してください。
たとえば、次のクエリ:
アップグレード前は完全に機能していました。
ここで、CTE が特定の行数を返したとしても、ラテラル ビューを使用すると、エラーなしで結果セットから行が削除されますが、CTE の外側に余分な where 句はありません (私の実際の例では、クエリは 66 行を返します)。側面図はありませんが、19 のみあります)。
私の場合、私は持っています:
select count(*)
66行ください- 静的文字列の側面図を追加すると、19 行しか表示されません。
私はかなりの数のバリエーションを試しました:
- イベント テーブルを静的 CTE ( ) に置き換えると、
select stack(1, ...)
期待どおりの結果が得られます - 横方向のビューを削除すると、期待する行数が得られます (使用しない限り、とは異なります)
- CTE の代わりに一時テーブルを作成して使用しても、結果は変わりません。
- CTEの外側に選択部分を配置
json_tuple(cte.json, 'customfield')
した場合(有効ではないため、他には何もありません)、 なしではlateral view
、期待される行数があります。 get_json_object
CTEの外側の選択部分で使用すると(側面図はありません)、期待される結果が得られます。- もちろん、ハイブ (サーバーまたはメタストア) のログには何もありません。
- 補足として、
merge
以前は完全に機能していたのに対し、アップグレード a ステートメント [重複を生成し続ける] [1] 以来。
もう 1 つの非常に驚くべきことは、CTE 内に if ステートメントがあることですif(is_deleted is null, 'true', 'false')
。完全に有効なはずの を に置き換えるis null
と、CTE から行が返されません。is not distinct from null
私は完全に途方に暮れており、なぜこれが起こるのか、どうすればハイブを信頼できるのかわかりません.
手動データを生成してもエラーを再現できないため、実際に機能する (ない) 例を示すことはできません。