google-cloud-dataflow - 使用 BeamSQL 构建嵌套结构
问题描述
在 BigQuery 中,我们有“ARRAY_AGG”函数,它有助于将普通集合转换为嵌套集合。是否有类似的方法可以使用 BeamSQL 构建相同类型的嵌套结构集合?类似于 BeamSQL 中的以下查询,
“从 PCOLLECTION Group by Column1 中选择 column1, ARRAY_AGG(STRUCT(column2, column3))”
解决方案
如果我正确理解了您的问题,您应该能够使用ARRAY
构造函数"SELECT ARRAY[1, 2, 3] f_arr"
,例如:
@Test
public void testArrayConstructor() {
BeamSqlEnv sqlEnv = BeamSqlEnv.inMemory(readOnlyTableProvider);
PCollection<Row> stream =
BeamSqlRelUtils.toPCollection(pipeline, sqlEnv.parseQuery("SELECT ARRAY[1, 2, 3] f_arr"));
PAssert.that(stream)
.containsInAnyOrder(
Row.withSchema(Schema.builder().addArrayField("f_arr", FieldType.INT32).build())
.addValue(Arrays.asList(1, 2, 3))
.build());
pipeline.run().waitUntilFinish(Duration.standardMinutes(2));
}
也可以看看:
- Calcite SQL 参考指南(它是 Beam SQL 使用的解析器);
- 梁复型试验;
- 梁嵌套行测试
推荐阅读
- ffmpeg - 使用 ffmpeg 或 gstreamer 将实时 mjpeg 流转码为 hls 流
- invisible-recaptcha - Google reCaptcha v2 recaptcha__en.js 错误
- angular - 如何使用表单以角度传递字段中的值?
- android - Gradle/Flutter 中的构建错误:“无法解析所有工件以进行配置”?
- javascript - 源有 2 个元素,但目标只允许 1 个。Typescript 扩展运算符
- virtualbox - 无法安装媒体/驱动器'/usr/share/virtualbox/VBoxGuestAdditions.iso' (VERR_PDM_MEDIA_LOCKED)
- go - 如何将具有返回更广泛接口的方法的 interfaceA 类型的变量分配给具有更窄返回的 interfaceB 类型的变量
- reactjs - 如何使用 TypeScript 访问 React State 属性?类型错误时获取属性不存在
- python - Numpy Python/C API - PyArray_SimpleNewFromData 挂起
- prometheus - Prometheus 即时向量 vs 范围向量