繁体   English   中英

重复记录到一个字符串,BigQuery

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM