[英]Repeated record to one string, BigQuery
我有一个包含查询作业的表,其中有一个重复的记录列referenced_tables 。 这条记录中有 3 列和几行,我想将整个记录转换为单个字符串,并使用列分隔符“。” 和 ',' 代表行。 记录中的列是项目、数据集和表 ID(字符串),每一行都是一个不同的表。 我正在尝试这样的事情:
select array_to_string(
[
array_to_string(
[
referenced_tables[ordinal(1)].project_id,
referenced_tables[ordinal(1)].dataset_id,
referenced_tables[ordinal(1)].table_id
], "."
),
array_to_string(
[
referenced_tables[ordinal(2)].project_id,
referenced_tables[ordinal(2)].dataset_id,
referenced_tables[ordinal(2)].table_id
], "."
)
], ", "
)
FROM my_table
其结果类似于: project1.dataset1.table1,project2.dataset2.table2当我指定一个作业时。 所以它有效,但我必须重复array_to_string与行数一样多,当然行数从一个作业更改为另一个作业,并且referenced_tables可以是 NULL,所以如果我在整个表上执行此操作,则会出现错误发生。
有没有办法根据我的条件将整个表的记录转换为字符串?
我对您的数据结构做了一些假设。 鉴于您说过这是通过查询进行的,因此存在某种与分组依据相关联的 query_id。
尝试以下
select
string_agg(concat(t.project_id,".",t.dataset_id,".",t.table_id),", ")
from sample_data
, unnest(referenced_tables) t
使用以下示例数据:
with sample_data as (
select 1 as query_id
, [STRUCT('my_project' as project_id, 'my_dataset' as dataset_id, 'table' as table_id)
,STRUCT('my_project1' as project_id, 'my_datase1' as dataset_id, 'table1' as table_id)
,STRUCT('my_projec2' as project_id, 'my_dataset2' as dataset_id, 'table2' as table_id)
] as referenced_tables
UNION ALL
select 2
, [STRUCT('my_project3' as project_id, 'my_dataset3' as dataset_id, 'table3' as table_id)
,STRUCT('my_project4' as project_id, 'my_datase4' as dataset_id, 'table4' as table_id)
,STRUCT('my_projec5' as project_id, 'my_dataset5' as dataset_id, 'table5' as table_id)
] as referenced_tables
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.