我编写了代码,使用硬编码的ProjectID,数据集,表格名称,GCS Temp&分期位置。
我正在寻找应该阅读的代码
来自BigQuery table(Dynamic parameters)
。
代码: -
public class DemoPipeline {
public static TableReference getGCDSTableReference() {
TableReference ref = new TableReference();
ref.setProjectId("myprojectbq");
ref.setDatasetId("DS_Emp");
ref.setTableId("emp");
return ref;
}
static class TransformToTable extends DoFn<String, TableRow> {
@ProcessElement
public void processElement(ProcessContext c) {
String input = c.element();
String[] s = input.split(",");
TableRow row = new TableRow();
row.set("id", s[0]);
row.set("name", s[1]);
c.output(row);
}
}
public interface MyOptions extends PipelineOptions {
/*
* Param
*
*/
}
public static void main(String[] args) {
MyOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(MyOptions.class);
options.setTempLocation("gs://demo-xxxxxx/temp");
Pipeline p = Pipeline.create(options);
PCollection<String> lines = p.apply("Read From Storage", TextIO.read().from("gs://demo-xxxxxx/student.csv"));
PCollection<TableRow> rows = lines.apply("Transform To Table",ParDo.of(new TransformToTable()));
rows.apply("Write To Table",BigQueryIO.writeTableRows().to(getGCDSTableReference())
//.withSchema(BQTableSemantics.getGCDSTableSchema())
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER));
p.run();
}
}
答案 0 :(得分:0)
即使要从包含其他数据的初始表(项目ID /数据集/表名称)中读取信息,也需要将此类信息硬编码到某个地方。 Haris建议使用属性文件是一种好方法,请查看以下建议:
Java Properties file。当必须更改或调整参数时使用。通常,不需要新编译的更改。这是一个必须存在或附加到您的Java类的文件。从GCS读取此文件是可行的,但是很奇怪。
管道执行参数。自定义参数可以解决您的问题,请检查Creating Custom Options以了解如何实现here is a small example。