アテナ/プレスト| 自己結合でID行を一致させることができません
文字列列のバイグラムを取得しようとしています。
私はここでのアプローチに従いましたが、Athena / Prestoは最終ステップでエラーを出します。
これまでのソースコード
with word_list as (
SELECT
transaction_id,
words,
n,
regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)') as f70,
f70_remittance_info
FROM exploration_transaction
cross join unnest(regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)')) with ordinality AS t (words, n)
where cardinality((regexp_extract_all(f70_remittance_info, '([a-zA-Z]+)'))) > 1
and f70_remittance_info is not null
limit 50 )
select wl1.f70, wl1.n, wl1.words, wl2.f70, wl2.n, wl2.words
from word_list wl1
join word_list wl2
on wl1.transaction_id = wl2.transaction_id
私が抱えている特定の問題は、トランザクションIDを自己結合しようとすると、最後の行にあります。常にゼロ行が返されます。wl1.n = wl2.n-1
(配列上の位置)だけで結合した場合は機能しますが、同じIDに制限できない場合は役に立ちません。
Athenaはprestoによるngrams関数をサポートしていないので、私はこのアプローチを残しています。
これが機能しない理由はありますか?ありがとう!
回答
GordonLinoff
これは憶測です。しかし、私はあなたのCTEがなしで使用limit
していることに注意しますorder by
。これは、任意の行のセットが返されることを意味します。
一部のデータベースはCTEを具体化しますが、多くはそうではありません。参照されるたびに、コードを個別に実行します。私の推測では、コードは独立して実行され、50行の任意のセットには共通のトランザクションIDがありません。
1つの解決策はorder by transacdtion_id
、サブクエリを追加することです。