PostgreSQL的Singer目标,使用Meltano SDK构建的Singer目标。
项目描述
target-postgres
Singer针对PostgreSQL数据库的目标。
使用Meltano SDK构建,适用于Singer Taps和Targets。
功能
关于
流映射
模式展平
验证记录
目标模式
硬删除
设置
设置 | 必需 | 默认 | 描述 |
---|---|---|---|
主机 | False | None | Postgres实例的主机名。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
端口 | False | 5432 | Postgres等待连接的端口。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
用户 | False | None | 用于认证的用户名。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
密码 | False | None | 用于认证的密码。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
数据库名 | False | None | 数据库名。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
sqlalchemy_url | False | None | SQLAlchemy连接字符串。这将覆盖使用host、user、password、port、dialect和所有ssl设置。注意,您必须正确转义密码中的特殊字符。请参阅https://docs.sqlalchemy.org.cn/en/20/core/engines.html#escaping-special-characters-such-as-signs-in-passwords |
方言+驱动程序 | False | postgresql+psycopg2 | 方言+驱动程序请参阅https://docs.sqlalchemy.org.cn/en/20/core/engines.html。通常只需保留此设置即可。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
default_target_schema | False | melty | 发送数据的目标Postgres模式,例如:tap-clickup |
activate_version | False | 1 | 如果设置为false,则tap将忽略激活版本消息。如果设置为true,则必须将add_record_metadata设置为true。 |
hard_delete | False | 0 | 当从tap发送激活版本时,此设置指定是否删除不匹配的记录,或者将它们标记为在_sdc_deleted_at 列中的日期。如果将activate_version 设置为false,则忽略此配置选项。 |
add_record_metadata | False | 1 | 请注意,必须启用此功能才能使activate_version生效!这将添加_sdc_extracted_at、_sdc_batched_at等到每个表中。有关更多信息,请参阅https://sdk.meltano.com/en/latest/implementation/record_metadata.html。 |
interpret_content_encoding | False | 0 | 如果设置为true,则目标将解释模式的编码来确定如何存储数据。使用此选项可能会导致数据存储更高效,但也可能导致数据未按预期编码时出现错误。 |
ssl_enable | False | 0 | 是否使用ssl来验证服务器的身份。使用ssl_certificate_authority和ssl_mode进行进一步自定义。要使用客户端证书对服务器进行身份验证,请使用ssl_client_certificate_enable。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
ssl_client_certificate_enable | False | 0 | 是否提供客户端证书作为对服务器进行身份验证的方法。使用ssl_client_certificate和ssl_client_private_key进行进一步自定义。要使用SSL验证服务器的身份,请使用ssl_enable。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
ssl_mode | False | verify-full | SSL保护方法,请参阅postgres文档以获取更多信息。必须是disable、allow、prefer、require、verify-ca或verify-full之一。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
ssl_certificate_authority | False | ~/.postgresql/root.crl | 应用于验证服务器身份的证书颁发机构。可以是证书本身(在.env中)或证书的文件路径。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
ssl_client_certificate | False | ~/.postgresql/postgresql.crt | 用于验证您向服务器身份的证书。可以是证书本身(在.env中)或证书的文件路径。注意,如果设置了sqlalchemy_url,则此设置将被忽略。 |
ssl_client_private_key | False | ~/.postgresql/postgresql.key | 您提供的证书的私钥。可以是证书本身(在 .env 中)或证书的文件路径。注意,如果设置了 sqlalchemy_url,则此设置将被忽略。 |
ssl_storage_directory | False | .secrets | 存储以原始值提供的 SSL 证书的文件夹。当证书/密钥以原始值提供而不是以文件路径提供时,必须将其写入文件后才能使用。此配置选项确定该文件创建的位置。 |
ssh_tunnel | False | None | SSH 通道配置,这是一个 JSON 对象 |
ssh_tunnel.enable | False | 0 | 启用 SSH 通道(也称为堡垒主机),有关其他 ssh_tunnel.* 属性的更多详细信息,请参阅 |
ssh_tunnel.host | False | None | 堡垒主机的地址,这是我们通过 ssh 连接到的主机 |
ssh_tunnel.username | False | None | 连接到堡垒主机的用户名 |
ssh_tunnel.port | False | 22 | 连接到堡垒主机的端口 |
ssh_tunnel.private_key | False | None | 堡垒主机的身份验证私钥 |
ssh_tunnel.private_key_password | False | None | 私钥密码,如果没有设置密码,请留空 |
运行以下命令可以获取支持的设置和功能的完整列表:target-postgres --about
内置设置
以下设置由 Meltano SDK 自动支持,并由本目标继承。
设置 | 必需 | 默认 | 描述 |
---|---|---|---|
load_method | False | TargetLoadMethods.APPEND_ONLY | 将数据加载到目标时的方法。 append-only 将始终写入所有输入记录,无论这些记录是否已存在。 upsert 将更新现有记录并插入新记录。 overwrite 将删除所有现有记录并插入所有输入记录。 |
batch_size_rows | False | None | 每个批次的最大行数。 |
validate_records | False | 1 | 是否验证传入流的模式。 |
stream_maps | False | None | 流映射功能的配置对象。有关更多信息,请参阅 Stream Maps。 |
stream_map_config | False | None | 在映射表达式中使用的用户定义的配置值。 |
faker_config | False | None | 用于映射表达式中 Faker 实例变量 fake 的配置。仅适用于插件指定 faker 作为附加依赖项(通过 singer-sdk faker 附加或直接指定)。 |
faker_config.seed | False | None | 用于对 Faker 生成器进行种子以产生确定输出值的值:https://faker.readthedocs.io/en/master/#seeding-the-generator |
faker_config.locale | False | None | 一个或多个 LCID 区域字符串,用于生成特定区域的输出:https://faker.readthedocs.io/en/master/#localization |
flattening_enabled | False | None | 'True' 以启用模式扁平化并自动展开嵌套属性。 |
flattening_max_depth | False | None | 扁平化模式的最大深度。 |
关于生成伪数据的通知
如果您需要访问流映射表达式中的 faker
实例,您需要将插件作为附加依赖项安装。
如果您正在使用 Meltano,您可以将 faker
附加到您的 meltano.yml
中,如下所示
- 如果您从 PyPI 安装插件
pip_url: "meltanolabs-target-postgres[faker]==<version>"
- 如果您从 Git 存储库安装插件
# Note the nested quotes
pip_url: "'meltanolabs-target-postgres[faker] @ git+https://github.com/MeltanoLabs/target-postgres.git@<ref>'"
安装
使用 pipx
pipx install meltanolabs-target-postgres
使用 uv
uv tool install meltanolabs-target-postgres
配置
各种 SSL 配置选项的解释
存在两种不同的过程,它们都隶属于SSL的范畴。第一种过程发生在客户端希望确保服务器身份的情况下,这是SSL更常见的使用原因。另一种是服务器希望确保客户端身份,用于身份验证/授权目的。
如果您的服务器已设置证书和私钥,并且您想将其证书与您拥有的根证书进行验证,请使用 ssl_enable
。然后,您可以使用 ssl_certificate_authority
和 ssl_mode
设置进一步自定义此过程。有关更多详细信息,请参阅文档。
如果您的服务器已设置根证书,并且您想向服务器提供证书以验证您的身份,请使用 ssl_client_certificate_enable
。然后,您可以使用 ssl_client_certificate
和 ssl_client_private_key
设置进一步自定义此过程。有关更多详细信息,请参阅文档。
使用环境变量进行配置
如果提供了 --config=ENV
,则此Singer目标将自动导入工作目录的 .env
文件中的任何环境变量,这样就会考虑配置值,如果终端上下文或 .env
文件中设置了匹配的环境变量。
源认证和授权
提供的数据库账户必须有权访问
- 创建模式
- 创建表(DDL)
- 将数据推送到表中(DML)
用法
您可以通过单独运行或使用 Meltano 管道来轻松运行 target-postgres
。
直接执行目标
target-postgres --version
target-postgres --help
# Test using the "Carbon Intensity" sample:
pipx install git+https://gitlab.com/meltano/tap-carbon-intensity
tap-carbon-intensity | target-postgres --config /path/to/target-postgres-config.json
使用Docker Compose
docker-compose.yml
提供了使用 Docker 创建两个空样本数据库的命令。这些可以作为创建自己的Docker中运行的数据库的起点,或者用于运行tap的内置测试。
开发者资源
初始化您的开发环境
pipx install poetry
poetry install
pipx install pre-commit
pre-commit install
设置SSL文件
我们将提供的密钥设置在 .ssl
目录中,使其有效期为数个世纪。然而,我们还提供了以下配置说明,以创建所有必要的测试SSL文件。
每个文件及其用途的列表
ca.crt
: 客户端证书的CA(存储在服务器上)cert.crt
: 客户端证书(存储在客户端)pkey.key
: 客户端私钥(存储在客户端)public_pkey.key
: 客户端私钥(文件权限不正确)(存储在客户端)root.crt
: 服务器证书的CA(存储在客户端)server.crt
: 服务器证书(存储在服务器上)server.key
: 服务器私钥(存储在服务器上)
运行以下命令以生成所有相关SSL文件,证书有效期为两个世纪(73048天)。
openssl req -new -x509 -days 73048 -nodes -out ssl/server.crt -keyout ssl/server.key -subj "/CN=localhost" &&
openssl req -new -x509 -days 73048 -nodes -out ssl/cert.crt -keyout ssl/pkey.key -subj "/CN=postgres" &&
cp ssl/server.crt ssl/root.crt &&
cp ssl/cert.crt ssl/ca.crt &&
cp ssl/pkey.key ssl/public_pkey.key &&
chown 999:999 ssl/server.key &&
chmod 600 ssl/server.key &&
chmod 600 ssl/pkey.key &&
chmod 644 ssl/public_pkey.key
现在所有SSL文件都已设置,您就可以设置pytest测试了。
创建和运行测试
使用Docker Compose启动测试数据库
docker-compose up -d
在 target_postgres/tests
子目录中创建测试,然后运行
poetry run pytest
您还可以使用 poetry run
直接测试 target-postgres
CLI接口
poetry run target-postgres --help
使用 Meltano 进行测试
注意:此目标在任何Singer环境中都可以工作,且不需要Meltano。此处提供的示例仅供参考,以便简化端到端编排场景。
您的项目已包含一个自定义的 meltano.yml
项目文件。
接下来,安装Meltano(如果您还没有安装)和任何需要的插件
# Install meltano
pipx install meltano
# Initialize meltano within this directory
meltano install
现在您可以使用Meltano进行测试和编排
# Test invocation:
meltano invoke target-postgres --version
SDK开发指南
请参阅开发指南以获取更多有关如何使用Meltano SDK开发自己的Singer插件和目标的信息。
数据类型
以下表格显示了此插件如何将jsonschema数据类型映射到Postgres数据类型。
jsonschema | Postgres |
---|---|
integer | bigint |
不支持 | bigserial |
不支持 | bit [(n)] |
不支持 | bit varying [(n)] |
boolean | boolean |
不支持 | box |
带contentEncoding="base16"(可选功能)的字符串 | bytea |
不支持 | character [(n)] |
不支持 | character varying [(n)] |
不支持 | cidr |
不支持 | circle |
格式为"date"的字符串 | date |
不支持 | double precision |
不支持 | inet |
不支持 | integer |
不支持 | interval [fields] [(p)] |
不支持 | json |
数组; 对象 | jsonb |
不支持 | line |
不支持 | lseg |
不支持 | macaddr |
不支持 | macaddr8 |
不支持 | money |
number | numeric [(p, s)] |
不支持 | path |
不支持 | pg_lsn |
不支持 | pg_snapshot |
不支持 | point |
不支持 | polygon |
不支持 | real |
不支持 | smallint |
不支持 | smallserial |
不支持 | serial |
无格式;无类型的字符串 | text |
格式为"time"的字符串 | time [(p)] [无时区] |
不支持 | time [(p)] with time zone |
格式为"date-time"的字符串 | timestamp [(p)] [无时区] |
不支持 | timestamp [(p)] with time zone |
不支持 | tsquery |
不支持 | tsvector |
不支持 | txid_snapshot |
格式为"uuid"的字符串 | uuid |
不支持 | xml |
注意,虽然对象类型直接映射到jsonb,数组类型则映射到jsonb数组。
如果一个列有多个jsonschema类型,以下顺序用于确定Postgres类型的优先级,从最高优先级到最低优先级。
- BYTEA
- ARRAY(JSONB)
- JSONB
- TEXT
- TIMESTAMP
- DATETIME
- DATE
- TIME
- DECIMAL
- BIGINT
- INTEGER
- BOOLEAN
- NOTYPE
内容编码支持
Json Schema支持contentEncoding
关键字,可用于指定输入字符串类型的编码。
此目标可以检测模式中的内容编码线索,以确定如何在Postgres中以更高效的方式存储数据。
内容编码解释默认禁用。这是因为默认配置旨在尽可能宽容,不假设可能导致数据丢失的数据。
但是,如果您知道您的数据遵循所宣传的内容编码方式,您可以启用此功能以获得更好的性能和存储效率。
要启用它,将interpret_content_encoding
选项设置为True
。
base16
字符串使用RFC 4648中定义的base16编码。
示例模式
{
"type": "object",
"properties": {
"my_hex": {
"type": "string",
"contentEncoding": "base16"
}
}
}
数据将在数据库中以bytea
的形式存储。
示例数据
# valid data
{ "my_hex": "01AF" }
{ "my_hex": "01af" }
{ "my_hex": "1af" }
{ "my_hex": "0x1234" }
# invalid data
{ "my_hex": " 0x1234 " }
{ "my_hex": "House" }
为了方便,支持以0x
开头或包含奇数个字符的数据,尽管这不是标准的一部分。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
meltanolabs_target_postgres-0.0.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b140e167b7258a98bc92d038effc45825386d9100cf584391066a6827504e5e |
|
MD5 | 63771011ff7170233d891b4253a217a8 |
|
BLAKE2b-256 | 377dc75d864477d61b5cfc41d7e21a416a43360e9f0f271ec094f0a02924b3ee |
meltanolabs_target_postgres-0.0.16-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c52510add21e0a572269c7379c400beeb71ebecdd319322ff69896fd935e2275 |
|
MD5 | 3ed2af208e4bf90ecbf5fde8bc0fb29d |
|
BLAKE2b-256 | 9874562ef3ae8733e4810eb24137a3f021f4ad370c96d5563bbaf7f4530c2d33 |