如何使用Java API使用标准SQL创建BigQuery视图?

时间:2017-06-09 20:06:58

标签: google-bigquery

我可以使用Java API创建视图,但查询需要是遗留的sql:

public void createView(String dataSet, String viewName, String query) throws Exception {

    Table content = new Table();
    TableReference tableReference = new TableReference();
    tableReference.setTableId(viewName);
    tableReference.setDatasetId(dataSet);
    tableReference.setProjectId(projectId);
    content.setTableReference(tableReference);

    ViewDefinition view = new ViewDefinition();

    view.setQuery(query);
    content.setView(view);
    LOG.debug("View to create: " + content);
    try {
        if (tableExists(dataSet, viewName)) {
            bigquery.tables().delete(projectId, dataSet, viewName).execute();
        }
    } catch (Exception e) {
        LOG.error("Could not delete table", e);
    }

    bigquery.tables().insert(projectId, dataSet, content).setProjectId(projectId).execute();
}

有没有办法使用API​​创建标准sql的BQ视图?

2 个答案:

答案 0 :(得分:2)

您需要在setUseLegacySQL(false)对象上设置ViewDefinition

[..]
ViewDefinition view = new ViewDefinition();
view.setQuery(query);
view.setUseLegacySql(false); //<-- you're missing this
content.setView(view);
[..]

请参阅API文档here

答案 1 :(得分:0)

使用新API,您可以使用&#34;#standardSQL&#34;用于避免默认LegacySQL设置的表示法(新API中不再存在setUseLegacySql()方法)。

以下是一个例子:

ViewDefinition tableDefinition = ViewDefinition.newBuilder("#standardSQL\n  WITH A AS (select 1 as foo) SELECT * from A").build();