Apache Parquet 是 Apache Hadoop 生态系统中一种免费开源的列式数据存储格式。它提供高效的数据压缩和编码方案,并具有增强的性能,以批量处理复杂数据。
本页介绍如何将 Parquet 文件中的数据导入到您的 Timescale 云服务。
最佳实践是使用与您的 Timescale 云服务托管在同一区域的 Ubuntu EC2 实例 作为迁移机器。也就是说,您在其上运行命令以将数据从源数据库移动到目标 Timescale 云服务的机器。
迁移数据之前
创建一个目标 Timescale 云服务。
每个 Timescale 云服务都有一个支持最流行的扩展的单个数据库。Timescale 云服务不支持表空间,并且没有与服务关联的超级用户。最佳实践是创建一个至少具有 8 个 CPU 的 Timescale 云服务,以获得更流畅的体验。更高规格的实例可以显着缩短整体迁移窗口。
为确保维护不会在过程中运行,请调整维护窗口。
为了更快的数据传输,最佳实践是您的目标服务和运行数据导入的系统位于同一区域。
要从 Parquet 文件导入数据
设置您的服务连接字符串
此变量保存目标 Timescale 云服务的连接信息。
在源机器上的终端中,设置以下内容
export TARGET=postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require您可以在创建服务时下载的配置文件中找到 Timescale 云服务的连接信息。
创建一个超表来保存您的数据
创建一个新的空表,其模式与您的 parquet 文件中的数据兼容。
例如,如果您的 parquet 文件包含列
ts
、location
和temperature
,类型分别为TIMESTAMP
、STRING
和DOUBLE
psql $TARGET -c "CREATE TABLE <TABLE_NAME> ( \ts TIMESTAMPTZ NOT NULL, \location TEXT NOT NULL, \temperature DOUBLE PRECISION NULL \);"如果您喜欢使用安全的 UI 而不是命令行,请使用 Timescale 控制台中的数据模式。
将空表转换为超表
在以下命令中,将
<TABLE NAME>
替换为您刚刚创建的表的名称,并将<COLUMN_NAME>
替换为<TABLE NAME>
中的分区列。psql $TARGET -c "SELECT create_hypertable('<TABLE_NAME>', by_range('<COLUMN_NAME>'))"
设置 DuckDB 到您的服务的连接
在具有 Parquet 文件的源机器上的终端中,启动一个新的 DuckDB 交互式会话
duckdb在您的 DuckDB 会话中连接到您的服务
ATTACH '<Paste the value of $TARGET here' AS db (type postgres);$TARGET
是您用于使用 psql 连接到服务的连接字符串。
从 Parquet 将数据导入到您的服务
在 DuckDB 中,将表数据上传到您的服务
COPY db.<TABLE_NAME> FROM '<FILENAME>.parquet' (FORMAT parquet);其中
<TABLE_NAME>
:您创建的用于导入数据的超表<FILENAME>
:要从中导入数据的 Parquet 文件
退出 DuckDB 会话
EXIT;
验证数据是否已正确导入到您的服务中
在您的
psql
会话中,或使用 Timescale 控制台中的数据模式,查看 <TABLE_NAME> 中的数据SELECT * FROM <TABLE_NAME>;
就这样,您已将数据从 Parquet 文件导入到您的 Timescale 云服务。
关键词