keboola / php-csv-db-import

处理大量数据到数据库表。


README

Build Status

处理大量数据到数据库表。

支持引擎

  • AWS Redshift, Snowflake
    • 从存储在AWS S3中的CSV文件加载数据
    • 从同一数据库中的另一个Redshift表加载数据

功能

  • 全量加载 - 加载前截断目标表
  • 增量加载 - 合并数据
  • 所有引擎的主键去重
  • 将空值转换为NULL(使用convertEmptyValuesToNull选项)

开发

准备

  • 使用aws-services.json云配置模板创建AWS S3存储桶和IAM用户。
  • 创建Redshift集群
  • 下载Snowflake驱动程序(.deb)并将其放置在存储库的根目录中(./snowflake-odbc.deb
  • 创建.env文件。使用aws-services云前端的输出填写变量以及您的Redshift凭证。
REDSHIFT_HOST=
REDSHIFT_PORT=5439
REDSHIFT_USER=
REDSHIFT_DATABASE=
REDSHIFT_PASSWORD=

SNOWFLAKE_HOST=
SNOWFLAKE_PORT=
SNOWFLAKE_USER=
SNOWFLAKE_PASSWORD=
SNOWFLAKE_DATABASE=
SNOWFLAKE_WAREHOUSE=

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET=
AWS_REGION=

将测试用例上传到S3

docker-compose run php php ./tests/loadS3.php

Redshift设置

测试需要用户和数据库。您可以创建它们

CREATE USER keboola_db_import PASSWORD 'YOUR_PASSWORD';
CREATE DATABASE keboola_db_import;
GRANT ALL ON DATABASE keboola_db_import TO keboola_db_import;

Snowflake设置

测试需要角色、用户、数据库和仓库。您可以创建它们

CREATE ROLE "KEBOOLA_DB_IMPORT";
CREATE DATABASE "KEBOOLA_DB_IMPORT";
GRANT ALL PRIVILEGES ON DATABASE "KEBOOLA_DB_IMPORT" TO ROLE "KEBOOLA_DB_IMPORT";

CREATE WAREHOUSE "KEBOOLA_DB_IMPORT" WITH WAREHOUSE_SIZE = 'XSMALL' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 3600 AUTO_RESUME = TRUE;
GRANT USAGE ON WAREHOUSE "KEBOOLA_DB_IMPORT" TO ROLE "KEBOOLA_DB_IMPORT" WITH GRANT OPTION;

CREATE USER "KEBOOLA_DB_IMPORT"
PASSWORD = "YOUR_PASSWORD"
DEFAULT_ROLE = "KEBOOLA_DB_IMPORT";

GRANT ROLE "KEBOOLA_DB_IMPORT" TO USER "KEBOOLA_DB_IMPORT";

测试执行

使用以下命令运行测试。

docker-compose run --rm tests

需要提供Redshift和S3凭证。