我正在使用Java和SQL将数据移动到新表中。我要:
不幸的是,一些旧数据遵循不同的模式。一些旧表可能缺少一列到几百个丢失的列(字段)。我没有任何可靠的方式来生成或填写此丢失的数据,因此我决定将其保留为空。如何添加具有默认null值的列?
此刻,我正在使用SQL QueryJobConfiguration将数据提取,更新和推回BQ:
let mockMediaSubject: BehaviorSubject<MediaChange>;
...
beforeEach(() => {
mockMediaSubject = new BehaviorSubject({});
TestBed.configureTestModule({
...
providers: [
{
provide: MediaObserver,
useValue: { media$: mockMediaSubject.asObservable() }
}
]
});
});
...
it("should set stackFooter to true when media$ emits 'xs' as mqAlias", () => {
mockMediaSubject.next({mqAlias: 'xs'});
expect(componentInstance.stackFooter).toBeTruthy();
});
...
it("should set stackFooter to true when media$ emits 'sm' as mqAlias", () => {
mockMediaSubject.next({mqAlias: 'sm'});
expect(componentInstance.stackFooter).toBeTruthy();
});
当我尝试运行此代码时,BigQuery引发异常,声称数据缺少列:
线程“主”中的异常com.google.cloud.bigquery.BigQueryException:无效的架构更新。新模式中缺少字段OtherField
答案 0 :(得分:0)
经过一堆测试,我发现BQ不允许我进行推送,因为我将多个字段设置为“ REQUIRED”而不是“ NULLABLE”。我完全忘记了他们。幸运的是,BigQuery有一个实验方法:setSchemaUpdateOptions。您可以像这样实现它:
List<SchemaUpdateOption> SchemaUpdate = Arrays.asList(JobInfo.SchemaUpdateOption.ALLOW_FIELD_RELAXATION);
.setSchemaUpdateOptions(SchemaUpdate)
ALLOW_FIELD_RELAXATION实际上使您可以用NULLABLE临时替换任何字段上的REQUIRED模式。