我正在尝试构建一个数据流管道,用于从BigQuery表中取消标识数据。我正在构建com.google.privaty.dlp.v2.Table对象,并将其传递给ContentItem,如下所示:
List<Field> fieldList = new ArrayList<>(
bigquery
.getTable(table)
.getDefinition()
.getSchema()
.getFields());
List<Table.Row> rows = new ArrayList<>();
for (FieldValueList bigQueryRowItem : bigquery
.listTableData(table)
.getValues()) {
Table.Row row = convertBigQueryRowToTableRow(bigQueryRowItem);
rows.add(row);
}
Table dlpTable = Table
.newBuilder()
.addAllHeaders(convertFieldsToHeaders(fieldList))
.addAllRows(rows)
.build();
但不幸的是,这个fieldList只包含一级BigQuery属性,没有RECORD或REPEATED属性。请告诉我如何有效地从表中获取所有字段的名称,包括RECORD/REEATED,以及如何有效地将BigQuery值转换为表。行?谢谢
目前这是通过两种方式之一完成的:
将字段展平为列。所以创纪录的
RecordA {Field1, Field2} becomes 2 columns, RecordA.Field1 and RecordA.Field2
对于重复的字段,您可以执行相同的操作,也可以将字段值合并到一个单元格中。
RecordA { Field1: {value1,value2,value3] } becomes 3 columns .... RecordA.Field1[0], RecordA.Field2[1], and RecordA.Field3[2]