CSV 是一种广泛用于数据迁移的文件格式。
此页面向您展示如何从 CSV 文件将数据导入到您的 Timescale Cloud 服务。
最佳实践是使用与您的 Timescale Cloud 服务托管在同一区域的 Ubuntu EC2 实例 作为迁移机器。也就是说,您在其上运行命令以将数据从源数据库移动到目标 Timescale Cloud 服务的机器。
迁移数据之前
创建一个目标 Timescale Cloud 服务。
每个 Timescale Cloud 服务都有一个支持最受欢迎的扩展的单个数据库。Timescale Cloud 服务不支持表空间,并且没有与服务关联的超级用户。最佳实践是创建至少具有 8 个 CPU 的 Timescale Cloud 服务,以获得更流畅的体验。更高规格的实例可以显着减少整体迁移窗口。
为确保维护不会在过程中运行,请调整维护窗口。
安装 Go v1.13 或更高版本
timescaledb-parallel-copy 通过并行化导入过程来提高大型数据集的性能。它还保留行顺序,并使用轮询方法来优化内存管理和磁盘操作。
要验证您的安装,请运行
timescaledb-parallel-copy --version
。确保 CSV 文件中的时间列使用
TIMESTAMPZ
数据类型。
为了更快的数据传输,最佳实践是您的目标服务和运行数据导入的系统位于同一区域。
要从 CSV 文件导入数据
设置您的服务连接字符串
此变量保存目标 Timescale Cloud 服务的连接信息。
在源机器上的终端中,设置以下内容
export TARGET=postgres://tsdbadmin:<PASSWORD>@<HOST>:<PORT>/tsdb?sslmode=require您可以在创建服务时下载的配置文件中找到您的 Timescale Cloud 服务的连接信息。
创建一个 超表 来保存您的数据
创建一个新的空表,其模式与您的 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>'))"
导入您的数据
在包含 CSV 文件的文件夹中,选择以下任一方法
为了在避免资源竞争的同时获得最佳性能,请将
<NUM_WORKERS>
设置为您服务中 CPU 数量的两倍,但小于可用的 CPU 核心数。timescaledb-parallel-copy \--connection $TARGET \--table <TABLE_NAME> \--file <FILE_NAME>.csv \--workers <NUM_WORKERS> \--reporting-period 30s对于自托管的 TimescaleDB,将
$TARGET
设置为host=localhost user=postgres sslmode=disable
使用 psql
psql COPY 是单线程的,对于大型数据集可能较慢。
psql $TARGET\c <DATABASE_NAME>\COPY <TABLE_NAME> FROM <FILENAME>.csv CSV"
验证数据是否已正确导入到您的服务中
就这样,您已从 CSV 文件导入了数据。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。