创建表

使用 CREATE TABLE 语句在 Vertica 逻辑架构中创建原生表。可以直接指定列,如以下示例所示,也可以使用 LIKEAS 子句从另一个表派生表定义。可以指定约束、分区、分段和其他因素。有关详细信息和限制,请参阅参考页面。

以下示例显示了基本表定义:

=> CREATE TABLE orders(
    orderkey    INT,
    custkey     INT,
    prodkey     ARRAY[VARCHAR(10)],
    orderprices ARRAY[DECIMAL(12,2)],
    orderdate   DATE
);

表数据存储

与传统数据库将数据存储在表中不同,Vertica 会将表数据以物理方式存储在 投影(即表列的集合)中。投影以优化查询执行的格式存储数据。与实体化视图类似,它们会将结果集存储在磁盘上,而不是每次在查询中使用时都进行计算。

为了对 Vertica 表进行查询或执行任何操作,该表必须具有一个或多个与之关联的 投影。有关详细信息,请参阅投影

从数据派生表定义

可以使用 INFER_TABLE_DDL 函数检查 Parquet、ORC、JSON 或 Avro 数据,并为表定义生成一个起点。此函数返回 CREATE TABLE 语句,它可能需要进一步编辑。对于函数无法推断数据类型的列,该函数会将类型标记为未知并发出警告。对于 VARCHAR 和 VARBINARY 列,可能需要调整长度。请始终查看函数返回的语句,但特别是对于具有很多列的表,使用该函数可以节省时间和精力。

Parquet、ORC 和 Avro 文件包含架构信息,但 JSON 文件并不包含。对于 JSON,该函数检查原始数据以生成一个或多个候选表定义。有关 JSON 示例,请参阅函数参考页面。

在以下示例中,该函数从 Parquet 输入推断出完整的表定义,但 VARCHAR 列使用默认大小,可能需要进行调整:

=> SELECT INFER_TABLE_DDL('/data/people/*.parquet'
        USING PARAMETERS format = 'parquet', table_name = 'employees');
WARNING 9311:  This generated statement contains one or more varchar/varbinary columns which default to length 80
                    INFER_TABLE_DDL
-------------------------------------------------------------------------
 create table "employees"(
  "employeeID" int,
  "personal" Row(
    "name" varchar,
    "address" Row(
      "street" varchar,
      "city" varchar,
      "zipcode" int
    ),
    "taxID" int
  ),
  "department" varchar
 );
(1 row)

对于 Parquet 文件,可以使用 GET_METADATA 函数检查文件并报告元数据,包括有关列的信息。

另请参阅