在 Google BigQuery 中将数组转换为字符串 [重复]

Posted

技术标签:

【中文标题】在 Google BigQuery 中将数组转换为字符串 [重复]【英文标题】:Converting arrays to string in Google BigQuery [duplicate] 【发布时间】:2021-05-13 07:14:26 【问题描述】:

我有一个类似的查询

SELECT lineid,
   array
   (
          select day_name positions
          FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'("+[A-Za-z]+"+:+"+[A-Za-z]+")')) pair,
                 unnest([STRUCT(CONCAT(REPLACE(SPLIT(pair, ':')[OFFSET(1)],'"',''),';') AS day_name)]) )day_part,
   array
   (
          SELECT start_time positions
          FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) pair,
                 unnest([STRUCT(CONCAT(REPLACE(SPLIT(SPLIT(pair, ':')[OFFSET(1)],',')[OFFSET(0)],'[',''),':00;')AS start_time    )])) hour_part,
   array(
          SELECT end_time VALUES    
         FROM unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) pair,
              unnest([STRUCT(CONCAT(REPLACE(REVERSE(SPLIT(REVERSE(SPLIT(pair, ':')[OFFSET(1)]),',')[OFFSET(0)]),']',''),':00;')AS end_time
)])
) time_part
FROM `project.dataset.table`

这给出了以下结果

我想要一个类似的输出

【问题讨论】:

我已修改查询并已解决问题 【参考方案1】:

我能够在 where 子句中使用偏移量来解决这个问题

SELECT lineid,
   day_part
FROM   (
            SELECT lineid,
                    array_to_string( array
                    (
                            select day_name
                            FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'("+[A-Za-z]+"+:+"+[A-Za-z]+")')) day WITH offset pos1,
                                unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) hour WITH offset pos2,
                                unnest([STRUCT(CONCAT(REPLACE(SPLIT(day, ':')[OFFSET(1)], '"', ''), ';')|| format_time('%I:%M %p', parse_time('%H:%M', concat(replace(split(split(hour, ':')[OFFSET(1)], ',')[OFFSET(0)], '[', ''), ':00')))             || ';' || format_time('%I:%M %p', parse_time('%H:%M', concat(replace(reverse(split(reverse(split(hour, ':')[OFFSET(1)]), ',')[OFFSET(0)]), ']', ''), ':00'))) AS day_name )])
                            WHERE  pos1 = pos2), '|')day_part
            FROM   table )

【讨论】:

以上是关于在 Google BigQuery 中将数组转换为字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Apps 脚本中将 BigQuery TIMESTAMP 转换为日期?

无法在 Google BigQuery 中将此旧版 SQL 转换为标准 SQL

在 BigQuery 中将列转换为数组

在 Google Cloud BigQuery 中存储句子嵌入

google-bigquery 在查询结果中将日期格式设置为 mm/dd/yyyy

在 BigQuery 中将行转置为列