【问题标题】:Create table SQL syntax in Google Bigquery在 Google Bigquery 中创建表 SQL 语法
【发布时间】:2016-12-09 12:42:19
【问题描述】:

自从昨晚深夜以来,我一直在阅读bigquery documentation,但对它知之甚少。它讨论了通过不同的方法加载数据,但没有说明如何创建我将要加载数据的表。当我使用 Web UI 时,它希望我输入架构。我的表有 400 多列。我不会输入数百个列名、类型和长度。

我一直在将数百 GB 的 csv 格式数据上传到 Google 存储桶。 csv 文件没有列名。我有我喜欢使用的 sql 格式的架构。

如果我尝试通过查询创建表,我在第 2 行已经收到错误消息,

"Error: Encountered "" at line 2, column 1."

CREATE TABLE [example-mdi:myData_1.ST] (
`ADDRESS_ID` varchar(9),
`INDIVIDUAL_ID` varchar(2),
`FIRST_NAME` varchar(25),
`LAST_NAME` varchar(2),...

我该怎么做或正确的方法是什么?

【问题讨论】:

  • 如果有人发现这个,我个人非常喜欢的一个替代方案是 MapD,它被重新命名为 OmniSci。它在github.com/omnisci/omniscidb 是开源的。它确实需要一些不错的硬件规格,但对于我的特定应用程序,这就是我所采用的,而且它们只会变得更好。我只使用 cpu(没有 GPU,我在服务器上有超过 500 GB 的内存和 40 个物理内核)在不到一秒的时间内搜索了超过 400 GB 的非常广泛的数据。

标签: google-bigquery


【解决方案1】:

您可以使用CREATE TABLE 语句使用标准 SQL 创建表。在你的情况下,声明看起来像这样:

CREATE TABLE `example-mdi.myData_1.ST` (
  `ADDRESS_ID` STRING,
  `INDIVIDUAL_ID` STRING,
  `FIRST_NAME` STRING,
  `LAST_NAME` STRING,
  ...
);

【讨论】:

  • 这是最近才添加的吗?我很确定一年前这不是真的。诚然,大约一年前我退出了 BigQuery,因为在我花了一周时间上传数据后,它未能将我的数据加载到表中。我设法用 MapD 设置了一个本地托管的单节点服务器。我已经在 400 毫秒左右的时间内在 400GB 表上处理数字,而 BigQuery 在 30GB 表上需要 2-4 秒。
  • CREATE TABLE 今天刚刚发布。我添加了这个作为答案,以防其他人遇到这个问题。
【解决方案2】:

米哈伊尔是对的,他的答案是值得称赞的。如果你和我一样慢,你会想要更多细节,因为在他指出正确的方式之后,仍然需要一段时间才能弄清楚他在说什么以及如何完成它。

当您在创建表用户界面时,单击“编辑为文本”链接。

在弹出的文本框中输入如下内容:

ADDRESS_ID:string,
INDIVIDUAL_ID:string,
First_name:string,
Last_name:string...

不允许使用连字符。

【讨论】:

  • 很高兴你得到这个 :o) - 认为这是显而易见的。下次会尝试更详细:o)
  • 起初我没有注意到编辑是文本或它的用途。接下来我不知道该放什么。我尝试不使用逗号,但出现错误。添加了逗号并得到了另一个关于连字符的错误。重新创建了用下划线替换连字符的字符串,它起作用了。我仍然不知道如何指定字段长度,但我猜这并不重要。
  • BigQuery 中的 STRING 是可变长度字符 (Unicode) 数据,因此无需设置长度
【解决方案3】:

当您在 Web UI 中创建表格时 - 您可以逐字段输入架构(Edit as Fields 模式 - 默认模式),也可以将架构作为文本输入(Edit as Text 模式)
因此,如果您已经拥有 sql 格式的架构,您可以直接使用它(您可能需要稍微调整它以符合 BigQuery)

查看更多关于 creating tables 与不同客户端的信息(在上面的 We bUI 部分中没有提供选项,所以我认为这就是你错过它的原因)

附:截至今天,BigQuery 不支持 DDL - 所以CREATE TABLE 不可用

更新

截至今天 - 2018 年 1 月 17 日 - BigQuery data definition language 支持现已在 Beta 中提供

【讨论】:

    【解决方案4】:

    截至 2021 年 4 月,复杂表可以完全使用标准 SQL 直接创建(具体见syntax guide)。

    CREATE TABLE IF NOT EXISTS `project.dataset.table_name`
    (
        someName STRING
        , dateTime TIMESTAMP NOT NULL -- REQUIRED or non-null column
        , index INT64 -- INT64 for INTEGER column
        , longitude FLOAT64 -- FLOAT64 for FLOAT column
        , arr ARRAY< -- declaring Array. This ARRAY is of datatype STRUCT
            STRUCT< -- declaring STRUCT
                a FLOAT64 -- the individual STRUCT members do not need the STRUCT column name again
                , b STRING
            >
        >
    );
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2022-10-23
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多