如何通过GCS将GA360表从Big query导出到雪花作为json文件而不丢失数据?
Posted
技术标签:
【中文标题】如何通过GCS将GA360表从Big query导出到雪花作为json文件而不丢失数据?【英文标题】:How to Export GA360 table from Big query to snowflake through GCS as json file without data loss? 【发布时间】:2021-01-17 11:26:24 【问题描述】:我正在使用 bq cli 命令将 GA360 表从 Big query 导出为雪花格式为 json 格式。当我将它加载为雪花中的表格时,我丢失了一些字段。我使用复制命令将我的 json 数据从雪花中的 GCS 外部阶段加载到雪花表中。但是,我缺少一些属于嵌套数组的字段。我什至尝试在导出到 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 以下?
【问题讨论】:
您缺少哪些字段? 我错过了 hits.transaction 和它的所有结构 @FelipeHoffa 【参考方案1】:我在导出 GA360 并将完整对象导入 Snowflake 时没有问题。
首先我将演示表 bigquery-public-data.google_analytics_sample.ga_sessions_20170801
导出到 GCS,JSON 格式。
然后我将它加载到雪花中:
create or replace table ga_demo2(src variant);
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
注意事项:
我从部署在 AWS 中的 Snowflake 轻松读取 GCS 文件。 Snowflake 中的 JSON 操作非常酷。请参阅https://hoffa.medium.com/funnel-analytics-with-sql-match-recognize-on-snowflake-8bd576d9b7b1 了解更多信息。
【讨论】:
大于 16 MB 的文件结果相同? 该文件大于 16MB。如果这对您不起作用,您能否与我分享一个可重现的示例? 只是检查问题是否有 16MB 限制,正如 OP 在他的问题的最后一行中提到的那样。 对!我错过了问题的那一部分,谢谢你提出来。我会重新检查。顺便说一句,我会觉得很奇怪源数据压缩后大于 16MB,所以希望他们能提供一个可重现的例子。 (请注意,在这种情况下,16MB 的压缩限制是每行,而不是每个文件)以上是关于如何通过GCS将GA360表从Big query导出到雪花作为json文件而不丢失数据?的主要内容,如果未能解决你的问题,请参考以下文章
Google Big Query 页面查看次数与 GA 页面查看次数不匹配
第二次使用 Dataflow 从 Big Query 中提取数据的问题 [apache beam]