繁体   English   中英

如何使用数据流在嵌套数组中加载数据

[英]How to load data in nested array using dataflow

我正在尝试将数据加载到下表中。 我能够在“array_data”中加载数据。 但是如何在嵌套数组“inside_array”中加载数据。我已经尝试了注释部分来加载 inside_array 数组中的数据,但它不起作用。 在此处输入图像描述

这是我的代码。- Pipeline p = Pipeline.create(options);

    org.apache.beam.sdk.values.PCollection<TableRow> output = p.apply(org.apache.beam.sdk.transforms.Create.of("temp"))
            .apply("O/P",ParDo.of(new DoFn<String, TableRow>() {
                /**
                 * 
                 */
                private static final long serialVersionUID = 307542945272055650L;

                @ProcessElement
                public void processElemet(ProcessContext c) {
                    TableRow row = new TableRow();
                    row.set("name","Jack");
                    row.set("phone","9874563210");
                    
                    TableRow ip = new TableRow().set("address", "M G Road").set("email","abc@gmail.com");
                    TableRow ip1 = new TableRow().set("address","F C Road").set("email","xyz@gmail.com");
                                
                    java.util.List<TableRow> metadata = new ArrayList<TableRow>();
                    metadata.add(ip);
                    metadata.add(ip1);
            
                    row.set("array_data",metadata);
                    
                    LOG.info("O/P:"+row);       
                    c.output(row);
                }}));
    
    output.apply("Write to table",BigQueryIO.writeTableRows().withoutValidation().to("AA.nested_array")
            .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
            .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE));
    
    p.run();
    

任何人都有任何线索或建议。在此先感谢。

要使用数据流处理嵌套数组,请创建一个单独的列表并将其添加到 tablerow 的主数组中。

在这里我尝试了这种方式,得到了预期的 output。

管道 p = Pipeline.create(options); org.apache.beam.sdk.values.PCollection output = p.apply(org.apache.beam.sdk.transforms.Create.of("temp")).apply("O/P",ParDo.of(new DoFn<String, TableRow>() {

                @ProcessElement
                public void processElemet(ProcessContext c) {
                    TableRow row = new TableRow();
                    row.set("name","Jack");
                    row.set("phone","9874563210");
                    
                    List<TableRow> listDest   = new ArrayList<>();
                    TableRow t=new TableRow().set("detail1","one" ).set("detail2", "two");
                    TableRow t1=new TableRow().set("detail1","three" ).set("detail2", "four");
                    listDest.add(t);
                    listDest.add(t1);
                            
                    
                    TableRow ip = new TableRow().set("address", "M G Road").set("email","abc@gmail.com").set("inside_array", listDest);
                    TableRow ip1 = new TableRow().set("address","F C Road").set("email","xyz@gmail.com").set("inside_array", listDest);
    
                    java.util.List<TableRow> metadata = new ArrayList<TableRow>();
                    metadata.add(ip);
                    metadata.add(ip1);
                
                    row.set("array_data",metadata);
                    LOG.info("O/P:"+row);       
                    c.output(row);
                }}));

还添加带有数据的表格图像。

在此处输入图像描述

希望如果有人在同一种桌子上工作会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM