创建表
使用 CREATE TABLE 语句在 Vertica 逻辑架构中创建原生表。可以直接指定列,如以下示例所示,也可以使用 LIKE 或 AS 子句从另一个表派生表定义。可以指定约束、分区、分段和其他因素。有关详细信息和限制,请参阅参考页面。
以下示例显示了基本表定义:
=> 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 函数检查文件并报告元数据,包括有关列的信息。