BigQuery:将表插入到具有分片表的现有 Google 分析中
Posted
技术标签:
【中文标题】BigQuery:将表插入到具有分片表的现有 Google 分析中【英文标题】:BigQuery: insert table to an existing Google analytics with sharded table 【发布时间】:2020-05-05 11:35:52 【问题描述】:我在 bigquery 中有一个现有的数据集 (A),其中 ga_sessions_YYYYMMDD(按日期分片)每天都通过谷歌分析填充。 我想做的是从具有相同模式的不同数据集(B)中插入数据。 例如,我有 ga_sessions_20200120 及更高版本,我想从数据集 (B) 中插入日期为 ga_sessions_20191201、20191202 的数据。我如何实现这一目标?由于我的数据集 (A) 中不存在 ga_sessions_20191201 表?
谢谢
【问题讨论】:
您是否尝试将表从数据集 B 移动到数据集 A? 我只想复制数据集A中不存在的表。 你要复制多少张表?是否有太多无法简单地做几个CREATE TABLE
查询?
我有至少 3 个月的 ga_sessions_YYYYMMDD 表
然后我将使用 BigQuery Data Transfer Service 数据集复制作业来执行此操作,它可以同步数据集并且仅跨目标表中不存在的表进行复制,听起来正是您需要的? cloud.google.com/bigquery/docs/copying-datasets
【参考方案1】:
如果您只想将一些特定日期表从 dataset_b 复制到 dataset_a,您可以在 Bash
脚本中使用 bq
命令,如下所示
d="20170708"
until [[ $d > 20170720 ]];
do bq cp <dataset_b>.ga_sessions_$d <dataset_a>.ga_sessions_$s;
d=$(date +'%Y%m%d' -d "$d + 1 day")
done
此脚本将从您在d
变量中定义的日期开始迭代日期,直到您在until
子句中定义的日期。
在每次迭代中,bq 命令都会将该日期的 ga_sessions 表从一个数据集复制到另一个数据集。
更新:
如果您想根据涉及其字段的条件复制表,可以使用bq query
为查询结果设置目标表:
date="20170708"
until [[ $date > 20170720 ]];
do
sql="SELECT "*" FROM <dataset_b>.ga_$date WHERE <your_condition>"
dest="<dataset_a>.ga_sessions_$date"
bq query --destination_table $dest -n=0 --use_legacy_sql=false "$sql";
date=$(date +'%Y%m%d' -d "$date + 1 day")
done
【讨论】:
是否可以在此处添加 WHERE 条件? 你到底想做什么? 我有数据集 A,其中包含从 ga_sessions_20191201 到 ga_sessions_20200223 的数据,我想将其复制到数据集 B 中,该数据集 B 在数据集 A 的日期范围内缺少数据。但是,我需要使用主机名过滤器过滤掉数据集 A 中的数据。 您要根据表格的某个字段对其进行过滤吗? 是的,这是正确的。过滤器是 ga_sessions_YYYYMMDD 中的字段之一以上是关于BigQuery:将表插入到具有分片表的现有 Google 分析中的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 BigQuery 中的 WebUI 导出现有表的架构?