Google bigquery 如何更改BigQuery重复记录的列类型

Google bigquery 如何更改BigQuery重复记录的列类型,google-bigquery,Google Bigquery,我正在尝试将重复记录的列类型从字符串更改为时间戳。这里有一些来自BQ文档的建议。然而,我遇到了每一个建议的问题 下面是一个示例模式: { 'name'=>'id', '类型'=>'字符串', '模式'=>'必需' }, { “名称”=>“名称”, '类型'=>'字符串', '模式'=>'必需' }, //更多字段,包括嵌套记录和重复记录 { “名称”=>“位置”, '类型'=>'记录', “模式”=>“重复”, “字段”=>[ { “名称”=>“城市”, '类型'=>'字符串', '模式'=>'

我正在尝试将重复记录的列类型从字符串更改为时间戳。这里有一些来自BQ文档的建议。然而,我遇到了每一个建议的问题

下面是一个示例模式:

{ 'name'=>'id', '类型'=>'字符串', '模式'=>'必需' }, { “名称”=>“名称”, '类型'=>'字符串', '模式'=>'必需' }, //更多字段,包括嵌套记录和重复记录 { “名称”=>“位置”, '类型'=>'记录', “模式”=>“重复”, “字段”=>[ { “名称”=>“城市”, '类型'=>'字符串', '模式'=>'必需' }, { '名称'=>'在'', 'type'=>'STRING',//**要将此作为时间戳吗** '模式'=>'必需' }, ] } 使用查询时出现的问题:

我认为我们必须取消重复记录的测试,将字段转换为每个重复记录的时间戳,然后以某种方式重新创建行以插入到新表中

将表导出为JSON时出现问题:

当以JSON格式导出表时,它会像我们所期望的那样,导出带有映射和字典的原始JSON数据表示形式

但是,我们无法将原始数据导入BQ:

BigQuery不支持JSON中的映射或字典。例如 product_categories:{my_product:40.0}无效,但是 产品类别:{column1:my_产品,column2:40.0} 有效


任何建议都将不胜感激

下面的答案基于此:BigQuery StandardSQL中的重复记录类型表示为类型数组

它不是我的最爱,因为您必须指定完整的列列表。也许有更好的办法

标准SQL -构建示例数据,尝试模仿有问题的内容。 创建或替换表 .样本表格 选择名称, 阵列[SFO,2011-1-1,SEA,2022-2-2] 作为地点 从UNNEST['Name1',Name2,Name3]开始作为名称;

然后,下面的SQL将把列中的update_转换为DATE,并保存到新表或相同的表中(如果您愿意)

标准SQL 创建或替换表 .输出_表为 选择*替换 ARRAYSELECT AS STRUCT*REPLACECASTupdate_at AS DATE AS update_at 从陌生的地方 作为地点 从…起 .样本表格;
下面的答案基于此:BigQuery StandardSQL中的重复记录类型表示为类型数组

它不是我的最爱,因为您必须指定完整的列列表。也许有更好的办法

标准SQL -构建示例数据,尝试模仿有问题的内容。 创建或替换表 .样本表格 选择名称, 阵列[SFO,2011-1-1,SEA,2022-2-2] 作为地点 从UNNEST['Name1',Name2,Name3]开始作为名称;

然后,下面的SQL将把列中的update_转换为DATE,并保存到新表或相同的表中(如果您愿意)

标准SQL 创建或替换表 .输出_表为 选择*替换 ARRAYSELECT AS STRUCT*REPLACECASTupdate_at AS DATE AS update_at 从陌生的地方 作为地点 从…起 .样本表格;
谢谢你的详细回复。在我的示例代码中,我过度简化了数据模型;我们正在处理的重复记录有30多个字段。。。。我想我只需要咬紧牙关,为所有的Fields再次打造所有类型。好运@harlow,我也在寻找更好的解决方案。但是30+字段不是什么大问题,我想你可能已经完成了工作。@harlow,我更新了我的答案,你可以在底部找到一个稍微好一点的解决方案。是的,谢谢。那好多了!新表不幸失去的一点是新表输出中的NOTNULL“mode”=>“REQUIRED”约束。i、 e.id和name我们在上一个表中是必需的,但生成它们的新表不是必需的required@harlow,我找到了答案如何避免指定列的列表。请查看更新。但它仍然没有保留“必需”信息。感谢您的详细回复。在我的示例代码中,我过度简化了数据模型;我们正在处理的重复记录有30多个字段。。。。我想我只需要咬紧牙关,为所有的Fields再次打造所有类型。好运@harlow,我也在寻找更好的解决方案。但是30+字段不是什么大问题,我想你可能已经完成了工作。@harlow,我更新了我的答案,你可以在底部找到一个稍微好一点的解决方案。是的,谢谢。那好多了!新表不幸失去的一点是新表输出中的NOTNULL“mode”=>“REQUIRED”约束。i、 e.id和name我们在上一个表中是必需的,但生成它们的新表不是必需的required@harlow,我找到了答案如何避免指定列的列表。请查看更新。但它仍然没有保留“必需”的信息。