店舗に関する情報を含むレコードがいくつかあります。これらのレコードには、いくつかの異なるネストされたフィールドがあります。ネストされたフィールドの 1 つはタグで、もう 1 つは従業員です。タグと特定の名前の従業員を持つ店舗の数を取得しようとしています。だから私はこれをしました:
SELECT count(*)
FROM [stores.stores_844_1]
where tags.tag_name='foo'
and employees.first_name='bar'
次に、エラーが発生します。
Error: Cannot query the cross product of repeated fields tags.tag_name and employees.first_name
.
クエリを次のように変更することで機能させることができます。
SELECT count(*)
FROM ((flatten([stores.stores_844_1],tags))
where tags.tag_name='foo'
and employees.first_name='bar'
これの問題は、 where句を動的に作成しているため、 from句はwhereの内容に応じて変更する必要があることです。from句がどうあるべきかを理解するためにコードでいくつかのロジックを生成できましたが、次のような方法があるかどうか疑問に思っていました。
SELECT count(*)
FROM [stores.stores_844_1]
where tags.tag_name='foo' WITHIN RECORD
and employees.first_name='bar' WITHIN RECORD
メインテーブルを平らにする必要はありませんか?私はこのような醜い回避策を試してみました:
SELECT count(*)
FROM
(SELECT GROUP_CONCAT(CONCAT('>', tags.tag_name,'<')) WITHIN RECORD as f1, GROUP_CONCAT(CONCAT('>',employees.first_name,'<')) WITHIN RECORD as f2
FROM [stores.stores_844_1]
)
where f1 CONTAINS '>foo<'
and f2 CONTAINS '>bar<'
この醜い回避策は私が望むように機能しますが、本当にハックで醜いように見え、もっと良い方法があるはずですよね?