2
我有一些記錄有關於商店的信息。這些記錄有幾個不同的嵌套字段。其中一個嵌套字段是標籤,一個是員工。我試圖計算具有特定名稱的標籤和僱員的商店數量。所以我這樣做:在BigQuery中使用多個嵌套字段
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'
的問題,這是我動態創建其中條款,所以我的從條款將根據改變我在裏有什麼。雖然我可以生成代碼的一些邏輯弄清楚從子句應該是什麼,我不知道是否有一種方法可以這樣做:
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<'
這個醜陋的變通辦法我怎麼想它,但它只是似乎真的哈克和醜陋,必須有一個更好的辦法,對不對?
不幸的是,當我嘗試這樣做,我得到的錯誤: '未知的領域。我認爲使用SUM絕對看起來好像比使用group_concat更高效,所以我會切換到使用它。理想情況下,將會有一種方法可以實現,所以只有子選擇的WHERE子句受到影響,並且您不必對SELECT子句做任何事情。 –
我已經更新了我的迴應,將where子句中的parens移動到了裏面。我不確定有沒有辦法做到這一點,而不修改外部where子句(不添加另一個嵌套選擇)。 –