常见用例
Vertica 支持多种读取数据的用例。此处总结了一些最常见的用例,并提供了用于获取详细信息的链接。这不是完整的功能列表。
COPY 语句是加载数据的核心。有关其使用概述,请参阅 COPY 语句简介。
从文件加载数据
您可能需要将数据(或许是大量数据)加载到 Vertica 中。这些文件可能驻留在共享存储上、云中或本地节点上,并且可能采用多种格式。
有关源位置的信息,请参阅指定加载数据的位置。要处理不同格式的数据,请指定解析器;有关选项的详细信息,请参阅数据格式。
您无需“按原样”加载数据;也可以在加载期间转换数据。请参阅在加载期间转换数据。
从其他服务加载数据
Apache Kafka 是一个流式数据传输平台。Vertica 支持将数据流式传输到 Kafka 以及从 Kafka 流式传输数据。请参阅Apache Kafka 集成。
Apache Spark 是一个用于分布式数据的群集计算框架。Vertica 支持连接到 Spark 以获取数据。请参阅Apache Spark 集成。
您可以直接从另一个 Vertica 群集复制数据,而不是导出到文件后再加载这些文件。请参阅数据库导出和导入。
读取存在的数据(不导入)
您可以使用外部表就地读取数据,而无需将数据加载到 Vertica 中。在以下情况下,使用外部表可能更有优势:
-
在选择要加载到 Vertica 中的数据之前,如果想浏览诸如数据湖中的数据。
-
如果您是共享诸如数据湖中的相同数据的多个使用者之一,则就地读取数据可以消除对查询结果是否是最新的顾虑。副本只有一份,因此所有使用者看到的数据都相同。
-
如果您的数据变化迅速,但您不想将其流式传输到 Vertica,则可以改为自动查询最新更新。
-
如果 Vertica 中拥有您仍希望能够查询的低优先级数据。
当您查询外部表时,Vertica 会从外部源加载所需的数据。已为此类加载优化 Parquet 和 ORC 列式格式,因此与将数据加载到 Vertica 原生表相比,使用外部表不一定会对性能产生很大影响。
有关使用外部表的详细信息,请参阅使用外部数据。
复杂类型
某些数据格式支持复杂类型,例如数组和结构体(属性值对的集合)。您可以使用强类型在原生和外部表中使用 ARRAY 和 ROW 类型(包括嵌套)来定义列。请参阅复杂类型。或者,您可以使用可变(无架构)复杂类型来定义表,而无需完全指定复杂类型。您可以加载 Parquet、ORC、JSON 和 Avro 格式的可变复杂类型;请参阅可变复杂类型。
未知或不断演变的架构
有时,您要加载的数据的架构是未知的或随时间而变化,尤其是使用在数据文件中未嵌入架构的 JSON 数据更是如此。可以使用 INFER_TABLE_DDL 函数检查示例数据文件并派生表定义。此函数会为列定义(包括使用复杂类型的列定义)返回良好的起点。对于 JSON 数据,如果数据文件存在变化,该函数可以返回多个候选者。
您可能仍需要进行调整(特别是对于未知类型的分区列),或调整 VARCHAR 值的大小。尤其对于具有多个列多或复杂列的表,使用此功能可以节省时间并减少手动工作量。如果您的数据随时间变化,您可以对新文件或更新后的文件运行该函数,并将建议的定义与现有的定义进行比较。
或者,您可以将无架构数据加载到 Flex 表中。所有数据都会加载到一个二进制列 (VMap) 中,并在查询时进行提取。不同的表行可能含有不同的内容,因此您无需随着数据结构的变化而更新表定义。Flex 表最适合用于初次浏览异构或多结构数据,而不是在生产数据库中浏览,因为查询时提取数据会影响性能。
加载到 Flex 表中通常与加载到任何其他表中一样,但是对于某些格式,您需要使用其他解析器。有关 Flex 表和特定于 Flex 的解析器的详细信息,请参阅 Flex 表。
杂乱的数据
有时数据并不干净;值可能与声明的数据类型不匹配,或者可能缺少必需的值,或者解析器可能由于其他原因而无法解释行。您可能仍希望能够加载和浏览这些数据。您可以使用 COPY 语句的参数来指定容错程度以及在何处记录被拒数据的相关信息。有关详细信息,请参阅处理杂乱的数据。