首页 文章

BigQuery无法创建视图但查询正常

提问于
浏览
4

我使用BigQuery进行分析 . 我写了这个查询 .

[setup_chr_lvs]的架构是userId是STRING,lv是STRIMG,chrLvs是STRING“[1,25,344]”(例如)

SELECT userId,
   lv,
   INTEGER(SPLIT( REGEXP_REPLACE( REGEXP_REPLACE(chrLvs, r'\[', ''), r'\]', ''), ",")) AS chrLv
   FROM [kpi.setup_chr_lvs]

此架构是成功的 . 但无法保存视图 .

无法创建视图 . 无法为字段 chrLV 创建有效的输出架构 . 尝试在最外面的SELECT中重命名 chrLv to f0_group.chrLv .

为什么?

2 回答

  • 0

    首先,错误消息的疯狂建议实际上可以工作 - 而不是你的 AS chrLv ,有 AS f0_group.chrLv . 我真的赢了't even try to explain exactly why, because I can',但是我可以给出一些关于这件事何时发生以及如何解决这个问题的背景知识 .

    这里的关键是 SPLIT . SPLIT 创建repeated values,这是单行和单列包含多个值的位置 . 当你 SPLIT "a,b,c" as val 时,立即结果是一行,其架构会说 val: string (repeated) .

    当您使用SPLIT运行查询时,默认情况下,查询结果将被展平:包含3次重复值的单行将变为3行 . 当您尝试保存视图时,行为是不同的:它不会变平 . 这就是您可以查询但不保存视图的原因 . (如果需要,可以通过设置查询选项来重现未平缓的行为:取消选中“展平结果”(也称为“允许大”和“选择表”) . )

    那么为什么有趣的错误与不平坦的结果?将函数应用于重复值时会发生这种情况 . 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 的缩进约定 . )

  • 2

    不知道BigQuery的内部,我想这是因为在某种程度上,你的chrLv被分解为称为“chrLv”的部分属性,这会混淆系统 .

    您是否尝试将“as”重命名为建议内容?

相关问题