Google bigquery Biquery,如何将字段拆分为最大大小的多列

Google bigquery Biquery,如何将字段拆分为最大大小的多列,google-bigquery,Google Bigquery,我有这个疑问 SELECT * EXCEPT( county_geom ), CASE WHEN CHAR_LENGTH(ST_ASTEXT(county_geom)) <32766 THEN county_geom ELSE NULL END AS county_geom FROM `bigquery-public-data.utility_us.us_county_area` 选择 *除(吉姆县)外, 案例 当CHAR_LENGTH(ST_ASTEXT

我有这个疑问

SELECT
  * EXCEPT( county_geom ),
  CASE
    WHEN CHAR_LENGTH(ST_ASTEXT(county_geom)) <32766 THEN county_geom
  ELSE
  NULL
END
  AS county_geom
FROM
  `bigquery-public-data.utility_us.us_county_area`
选择
*除(吉姆县)外,
案例
当CHAR_LENGTH(ST_ASTEXT(country_geom))小于p>时,请尝试以下操作(对于BigQuery标准SQL)

上面将原始值拆分为大小为1000的元素-这样,您就可以将数组的元素合并回原始值

如果尺寸接近32K,您可以使用以下选项

SELECT * EXCEPT( county_geom ),
  REGEXP_EXTRACT_ALL(ST_ASTEXT(county_geom), r'' || REPEAT('.', 32) || '{1000}') county_geom_arr
FROM `bigquery-public-data.utility_us.us_county_area`

根据要求,使用动态SQL的解决方案:

DECLARE column_length int64;
DECLARE county_geom_arr_select string;

CREATE TEMP TABLE source_data AS (
SELECT * EXCEPT( county_geom ),
  REGEXP_EXTRACT_ALL(ST_ASTEXT(county_geom), r'' || REPEAT('.', 32) || '{1000}') county_geom_arr
FROM `bigquery-public-data.utility_us.us_county_area`
);

SET column_length = (SELECT max(array_length(county_geom_arr)) FROM source_data);
SET county_geom_arr_select = (SELECT ARRAY_TO_STRING(ARRAY_AGG("county_geom_arr[SAFE_OFFSET("||offset_nr||")] as col"||offset_nr), ", ") from UNNEST(GENERATE_ARRAY(0, column_length, 1)) offset_nr);

EXECUTE IMMEDIATE format("""
  SELECT * EXCEPT( county_geom_arr ), %s from source_data
""", county_geom_arr_select)

创建数组的正则表达式基于答案,谢谢

你能详细说明一下你的用例吗?很可能仅仅根据大小进行分割是不够的。我补充道:“请分享更多关于你想要达到的目标的细节。我很好奇。”。您是否考虑过以编程方式执行额外的处理,而不是直接从BigQuery接收结果?我正在使用PowerQuery拆分列并在数据模型中再次连接它们,但我认为本机sql将是fasterit必须是列,我不认为PBI支持arrayyou可以将其取消到行,然后在EXCEL中执行pivot-对吗?让我知道这是否是合理的选择,您是否需要在上述非最新版本中的进一步帮助否,Excel不参与工作流,是否有使用列的解决方案请告诉我我如何认为Excel是用例的一部分。无论如何-我有一个选择-将在一天内返回到它稍后-敬请期待
DECLARE column_length int64;
DECLARE county_geom_arr_select string;

CREATE TEMP TABLE source_data AS (
SELECT * EXCEPT( county_geom ),
  REGEXP_EXTRACT_ALL(ST_ASTEXT(county_geom), r'' || REPEAT('.', 32) || '{1000}') county_geom_arr
FROM `bigquery-public-data.utility_us.us_county_area`
);

SET column_length = (SELECT max(array_length(county_geom_arr)) FROM source_data);
SET county_geom_arr_select = (SELECT ARRAY_TO_STRING(ARRAY_AGG("county_geom_arr[SAFE_OFFSET("||offset_nr||")] as col"||offset_nr), ", ") from UNNEST(GENERATE_ARRAY(0, column_length, 1)) offset_nr);

EXECUTE IMMEDIATE format("""
  SELECT * EXCEPT( county_geom_arr ), %s from source_data
""", county_geom_arr_select)