sql如何创建视图?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何创建视图?相关的知识,希望对你有一定的参考价值。

参考技术A

使用create view语句就可以创建视图了,具体语句如下:

create view  viewname as select * from Tab_EdsProd(Tab_EdsProd是表的名字)where (后面可以接一线限制的条件)。

删除视图:drop view viewname。

基本语句:

1、添加主键

Alter table tabname add primary key(col)

说明:删除主键:Alter table tabname drop primary key(col)

2、创建索引

create [unique] index idxname on tabname(col?。)

3、删除索引:drop index idxname on tabname

注:索引是不可更改的,想更改必须删除重新建。

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

【中文标题】如何使用 Java API 使用标准 SQL 创建 BigQuery 视图?【英文标题】:How do I create a BigQuery view with standard SQL using the Java API? 【发布时间】:2017-06-09 20:06:58 【问题描述】:

我可以使用 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 视图?

【问题讨论】:

我在 API 文档中没有看到相关选项。如果您在查询本身的开头使用#standardSQL 会怎样? 【参考方案1】:

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

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

请参阅 API 文档 here。

【讨论】:

你是对的。我使用的是旧版本的 api 这里是“新”版本的链接(忽略大红色的“这是旧版本”警告):developers.google.com/api-client-library/java/apis/bigquery/v2 /boggle @AndreyFedorov - 不关注你。那是较旧的API。新的(更惯用的)在这里:github.com/GoogleCloudPlatform/google-cloud-java/tree/master/… 哦,太新太惯用了。你能指出你正在谈论的 setUseLegacySql 方法吗?看来我的 command-f 坏了github.com/GoogleCloudPlatform/google-cloud-java/blob/master/… 确实,新的 API 很遗憾不再提供这种方法:***.com/questions/46813165/…【参考方案2】:

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

这是一个例子:

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

【讨论】:

以上是关于sql如何创建视图?的主要内容,如果未能解决你的问题,请参考以下文章

用SQL代码创建一个视图,并查询视图中的字段

在sql2008中,如何查看已经创建好的视图,创建时候的语句?

SQL:如何从递归查询创建视图?

hsqldb 如何创建视图

如何使用 SQLAlchemy 创建 SQL 视图?

如何用SQL语句创建一个视图