Google bigquery JSON数组上的BigQuery枚举类函数

Google bigquery JSON数组上的BigQuery枚举类函数,google-bigquery,Google Bigquery,我想将一个JSON编码的列表转换成一个原生BigQuery数组,理想情况下,这将是一个包含值、位置项的元组或字典列表。因此,需要引用python枚举功能 i、 e 将json转换为数组的第一部分,我已经用这个 编辑: WITH my_ids AS ( SELECT 'xyz' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "

我想将一个JSON编码的列表转换成一个原生BigQuery数组,理想情况下,这将是一个包含值、位置项的元组或字典列表。因此,需要引用python枚举功能

i、 e

将json转换为数组的第一部分,我已经用这个

编辑:

WITH
  my_ids AS (
  SELECT 'xyz' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
  UNION ALL
  SELECT 'abc' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
  )

SELECT
  *
FROM my_ids
在理想情况下,我会得到如下输出:

xyz, 7f9f98fh9g4ef393d3h5, 1
xyz, chg3g33f26949hg6067d, 2
...
abc, 946637g145h48322686f, 6
请注意,列表可能相当长(最多24个条目,我不想硬编码所有路径)

Edit2:(可能的解决方案)


下面是BigQuery标准SQL

#standardSQL
WITH `project.dataset.my_ids` AS (
  SELECT 'xyz' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids UNION ALL
  SELECT 'abc' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids
)
SELECT grp, id, ROW_NUMBER() OVER(PARTITION BY grp ORDER BY OFFSET) pos
FROM `project.dataset.my_ids`, 
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(ids,'$'), r'[\[\]\"]', ''), ',')) id WITH OFFSET

下面是BigQuery标准SQL

#standardSQL
WITH `project.dataset.my_ids` AS (
  SELECT 'xyz' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids UNION ALL
  SELECT 'abc' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids
)
SELECT grp, id, ROW_NUMBER() OVER(PARTITION BY grp ORDER BY OFFSET) pos
FROM `project.dataset.my_ids`, 
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(ids,'$'), r'[\[\]\"]', ''), ',')) id WITH OFFSET


请提供输入和所需输出的简化示例,以及有关您正在查找的查询类型的更多详细信息for@MikhailBerlyant更新了,这是否让它更清晰?只需将您的解决方案作为答案发布即可!还是这还不是你想要的?@MikhailBerlyant是的,我想我会这么做。我想知道是否有一种更自然的方式来实现我想要的。这感觉有点难看:Di可以看到另一个不太详细的选项-将很快发布。。。张贴!请提供输入和所需输出的简化示例,以及有关您正在查找的查询类型的更多详细信息for@MikhailBerlyant更新了,这是否让它更清晰?只需将您的解决方案作为答案发布即可!还是这还不是你想要的?@MikhailBerlyant是的,我想我会这么做。我想知道是否有一种更自然的方式来实现我想要的。这感觉有点难看:Di可以看到另一个不太详细的选项-将很快发布。。。张贴!事实上,更干净,有趣的是,在移动到补偿之前,我确实有一个这样的版本。将此逻辑应用于~60GB时,我不断遇到资源超出错误。在我的管道中还有另一个窗口函数,它现在也造成了资源过剩的问题。所以我不能肯定。你能谈谈这两种方法在资源使用方面的比较吗?你知道我如何克服over函数超出的资源吗?我记得在我的脑海深处,有一些关于双重分区的东西。在评论中回答这个问题是不可能的-我建议你发布一个新的问题,包括具体的用例和所有相关的细节,这样我们就可以帮助你了。下面的问题不是更清晰了吗?我将很快写下下面的问题。从
project.dataset.my\u id
中选择grp、id、pos+1作为pos,UNNEST(拆分(REGEXP\u REPLACE(JSON提取(id,'$)、r'[[]\']、'')、id和偏移量作为pos或仅接受,即索引是零基的,本质上是“带偏移量”“这就是我最初的要求!!这是一个独立的问题,顺便说一句:确实更干净,有趣的是,在迁移到offset之前,我确实有一个这样的版本。将此逻辑应用于~60GB时,我不断遇到资源超出错误。在我的管道中还有另一个窗口函数,它现在也造成了资源过剩的问题。所以我不能肯定。你能谈谈这两种方法在资源使用方面的比较吗?你知道我如何克服over函数超出的资源吗?我记得在我的脑海深处,有一些关于双重分区的东西。在评论中回答这个问题是不可能的-我建议你发布一个新的问题,包括具体的用例和所有相关的细节,这样我们就可以帮助你了。下面的问题不是更清晰了吗?我将很快写下下面的问题。从
project.dataset中选择grp,id,pos+1作为pos。我的id
,UNNEST(SPLIT(REGEXP\u REPLACE(JSON\u EXTRACT(ids,'$)、r'[[[]\']、'')、id和OFFSET作为pos或just accept,索引是零基的,本质上“WITH OFFSET”是我最初想要的!!这是一个独立的问题,顺便说一下:
#standardSQL
WITH `project.dataset.my_ids` AS (
  SELECT 'xyz' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids UNION ALL
  SELECT 'abc' AS grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' AS ids
)
SELECT grp, id, ROW_NUMBER() OVER(PARTITION BY grp ORDER BY OFFSET) pos
FROM `project.dataset.my_ids`, 
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(ids,'$'), r'[\[\]\"]', ''), ',')) id WITH OFFSET