簡體   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