跳转到主要内容

PostgreSQL的Singer目标,使用Meltano SDK构建的Singer目标。

项目描述

target-postgres

PyPI - Version PyPI - Downloads PyPI - License Test 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 中,如下所示

  1. 如果您从 PyPI 安装插件
pip_url: "meltanolabs-target-postgres[faker]==<version>"
  1. 如果您从 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_authorityssl_mode 设置进一步自定义此过程。有关更多详细信息,请参阅文档

如果您的服务器已设置根证书,并且您想向服务器提供证书以验证您的身份,请使用 ssl_client_certificate_enable。然后,您可以使用 ssl_client_certificatessl_client_private_key 设置进一步自定义此过程。有关更多详细信息,请参阅文档

使用环境变量进行配置

如果提供了 --config=ENV,则此Singer目标将自动导入工作目录的 .env 文件中的任何环境变量,这样就会考虑配置值,如果终端上下文或 .env 文件中设置了匹配的环境变量。

源认证和授权

提供的数据库账户必须有权访问

  1. 创建模式
  2. 创建表(DDL)
  3. 将数据推送到表中(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文件。

每个文件及其用途的列表

  1. ca.crt: 客户端证书的CA(存储在服务器上)
  2. cert.crt: 客户端证书(存储在客户端)
  3. pkey.key: 客户端私钥(存储在客户端)
  4. public_pkey.key: 客户端私钥(文件权限不正确)(存储在客户端)
  5. root.crt: 服务器证书的CA(存储在客户端)
  6. server.crt: 服务器证书(存储在服务器上)
  7. 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 (235.3 kB 查看哈希值)

上传时间 源代码

构建分布

meltanolabs_target_postgres-0.0.16-py3-none-any.whl (258.1 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面