如何通过GCS作为json文件将G360表从Big查询导出到雪花,而不会丢失数据?

问题描述

我正在使用bq cli命令将GA360表从Big查询导出为json格式的雪花。当我将其加载为雪花表时,我丢失了一些字段。我使用copy命令从雪花中的GCS外部阶段将我的json数据加载到雪花表中。但是,我缺少嵌套数组一部分的某些字段。导出到gcs时,我什至尝试压缩文件,但仍然丢失数据。有人可以建议我该怎么做。我不想在bigquery中弄平表并将其转移。我的每日表格大小最小为1.5GB,最大为4GB。

bq extract \
  --project_id=myproject \
  --destination_format=NEWLINE_DELIMITED_JSON \
  --compression GZIP \
  datasetid.ga_sessions_20191001 \
gs://test_bucket/ga_sessions_20191001-*.json

我已经在雪花中设置了集成,文件格式和阶段。我将数据从该存储桶复制到具有一个变体字段的表中。行计数与“大”查询匹配,但字段丢失。 我猜这是由于雪花的限制,每个变体列应为16MB。有什么方法可以将每个变体字段压缩到16MB以下?

解决方法

我可以轻松导出GA360,并将完整的对象导入Snowflake。

首先,我将演示表bigquery-public-data.google_analytics_sample.ga_sessions_20170801导出为JSON格式的GCS。

然后我将其加载到Snowflake:

COPY INTO ga_demo2
FROM 'gcs://[...]/ga_sessions000000000000'
FILE_FORMAT=(TYPE='JSON');

然后找到transactionIds:

SELECT src:visitId,hit.value:transaction.transactionId
FROM ga_demo1,lateral flatten(input => src:hits) hit
WHERE src:visitId='1501621191'
LIMIT 10

enter image description here

需要注意的很酷的事情

  • 我可以轻松地从部署在AWS中的Snowflake读取GCS文件。
  • Snowflake中的JSON操作真的很棒。