首先,錯誤消息的瘋狂的建議實際上可以工作 - 而不是你的AS chrLv
,有AS f0_group.chrLv
。我甚至不會試圖解釋究竟爲什麼,因爲我不能,但我可以給出一些背景知道什麼時候發生這種事情,以及如何解決這個問題。
這裏的關鍵是SPLIT
。 SPLIT
創建repeated values,其中單行和單列包含多個值。 當SPLIT "a,b,c" as val
時,立即結果是單個行,其模式將會說val: string (repeated)
。
當您使用SPLIT運行查詢時,默認情況下查詢結果將變平坦:包含3重複值的單個行將變成3行。當您嘗試保存視圖時,行爲是不同的:它不會變平。這就是爲什麼你可以查詢但不保存視圖。 (如果需要,可以通過設置查詢選項來重現unflattened行爲:取消選中「Flatten Results」(也稱爲「Allow Large」和「Select Table」)。當您將函數應用於重複值時會發生這種情況。 SPLIT
創建一個重複的輸出,並且INTEGER
適用於此,在表達式的模式中觸發一個驚喜。
解決方法是在應用該功能之前刪除重複 - 將其平鋪爲多行。首先是SPLIT
,然後是FLATTEN
,然後是INTEGER
。就像這樣:
SELECT
userId,
lv,
INTEGER(chrLvStr) as chrLv
FROM FLATTEN(
(
SELECT
userId,
lv,
SPLIT(REGEXP_REPLACE(REGEXP_REPLACE(chrLvs, r'\[', ''), r'\]', ''), ",") AS chrLvStr
FROM [test.setup_chr_lvs]
),
chrLvStr
)
這將運行(並可以保存爲一個視圖),其中[test.setup_chr_lvs]
是從該查詢保存數據的一個行的模型:
select "user1" as userId, "lv1" as lv, "[1, 24, 344]" as chrLvs
(不,我做沒有我用於FLATTEN
的縮進約定。)