SQL Server to BigQuery 模板

SQL Server to BigQuery 模板是一种批处理流水线,可将 SQL Server 表中的数据复制到现有 BigQuery 表。此流水线使用 JDBC 连接到 SQL Server。为了增加一项保护措施,您还可以在传入使用 Cloud KMS 密钥加密的 Base64 编码用户名、密码和连接字符串参数的同时,传入该 Cloud KMS 密钥。如需详细了解如何对用户名、密码和连接字符串参数进行加密,请参阅 Cloud KMS API 加密端点

流水线要求

  • 在运行此流水线之前,BigQuery 表必须已存在。
  • BigQuery 表必须具有兼容的架构。
  • 必须能够从 Dataflow 运行的子网访问关系数据库。

模板参数

参数 说明
connectionURL JDBC 连接网址字符串。例如:jdbc:sqlserver://some-host:port-number/sampledb。您可以将此值作为使用 Cloud KMS 密钥加密,然后进行 Base64 编码的字符串传入。 从 Base64 编码的字符串中移除空白字符。如需了解详情,请参阅 SQL Server 教程中的构建连接网址
outputTable BigQuery 输出表位置,采用 <my-project>:<my-dataset>.<my-table> 格式。
bigQueryLoadingTemporaryDirectory BigQuery 加载进程的临时目录。例如 gs://<my-bucket>/my-files/temp_dir
query 要在提取数据的源上运行的查询。例如:select * from sampledb.sample_table。不使用分区时,需要此参数。
table 用于读取数据的表。此参数还接受用英文括号括起的子查询。 例如 Person(select id, name from Person) as subq。 使用分区时,需要此参数。
partitionColumn 要用于分区的列的名称。仅支持数值列。 使用分区时,需要此参数。
connectionProperties 可选:用于 JDBC 连接的属性字符串。字符串的格式必须为 [propertyName=property;]*。例如 authentication=ActiveDirectoryIntegrated;domainName=DOMAIN。如需了解详情,请参阅 SQL Server 教程中的属性
username 可选:要用于 JDBC 连接的用户名。您可以将由 Cloud KMS 密钥加密的值作为 Base64 编码的字符串传入。
password 可选:要用于 JDBC 连接的密码。您可以将由 Cloud KMS 密钥加密的值作为 Base64 编码的字符串传入。
KMSEncryptionKey 可选:要用于对用户名、密码和连接字符串进行解密的 Cloud KMS 加密密钥。如果您传入 Cloud KMS 密钥,则还必须对用户名、密码和连接字符串进行加密。
numPartitions 可选:要使用的分区数量。如果未指定,则工作器会采用保守数量。
disabledAlgorithms 可选:要停用的以英文逗号分隔的算法。如果此值设置为 none,则不会停用任何算法。请谨慎使用此参数,因为默认停用的算法可能存在漏洞或性能问题。 例如:SSLv3, RC4.
extraFilesToStage 用于将文件暂存在工作器中的 Cloud Storage 路径或 Secret Manager 密文,以逗号分隔。 这些文件保存在每个工作器的 /extra_files 目录中。 例如 gs://<my-bucket>/file.txt,projects/<project-id>/secrets/<secret-id>/versions/<version-id>

运行模板

控制台

  1. 转到 Dataflow 基于模板创建作业页面。
  2. 转到“基于模板创建作业”
  3. 作业名称字段中,输入唯一的作业名称。
  4. 可选:对于区域性端点,从下拉菜单中选择一个值。默认区域为 us-central1

    如需查看可以在其中运行 Dataflow 作业的区域列表,请参阅 Dataflow 位置

  5. Dataflow 模板下拉菜单中,选择 the SQL Server to BigQuery template。
  6. 在提供的参数字段中,输入您的参数值。
  7. 点击运行作业

gcloud

在 shell 或终端中,运行模板:

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/SQLServer_to_BigQuery \
    --parameters \
connectionURL=JDBC_CONNECTION_URL,\
query=SOURCE_SQL_QUERY,\
outputTable=PROJECT_ID:DATASET.TABLE_NAME,
bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\
connectionProperties=CONNECTION_PROPERTIES,\
username=CONNECTION_USERNAME,\
password=CONNECTION_PASSWORD,\
KMSEncryptionKey=KMS_ENCRYPTION_KEY

请替换以下内容:

  • JOB_NAME:您选择的唯一性作业名称
  • VERSION:您要使用的模板的版本

    您可使用以下值:

  • REGION_NAME:要在其中部署 Dataflow 作业的区域,例如 us-central1
  • JDBC_CONNECTION_URL:JDBC 连接网址
  • SOURCE_SQL_QUERY:需要在源数据库上运行的 SQL 查询
  • DATASET:您的 BigQuery 数据集
  • TABLE_NAME:您的 BigQuery 表名称
  • PATH_TO_TEMP_DIR_ON_GCS:临时目录的 Cloud Storage 路径
  • CONNECTION_PROPERTIES:JDBC 连接属性(如有需要)
  • CONNECTION_USERNAME:JDBC 连接用户名
  • CONNECTION_PASSWORD:JDBC 连接密码
  • KMS_ENCRYPTION_KEY:Cloud KMS 加密密钥

API

如需使用 REST API 来运行模板,请发送 HTTP POST 请求。如需详细了解 API 及其授权范围,请参阅 projects.templates.launch

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
  "launchParameter": {
    "jobName": "JOB_NAME",
    "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/SQLServer_to_BigQuery"
    "parameters": {
      "connectionURL": "JDBC_CONNECTION_URL",
      "query": "SOURCE_SQL_QUERY",
      "outputTable": "PROJECT_ID:DATASET.TABLE_NAME",
      "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS",
      "connectionProperties": "CONNECTION_PROPERTIES",
      "username": "CONNECTION_USERNAME",
      "password": "CONNECTION_PASSWORD",
      "KMSEncryptionKey":"KMS_ENCRYPTION_KEY"
    },
    "environment": { "zone": "us-central1-f" }
  }
}

请替换以下内容:

  • PROJECT_ID:您要在其中运行 Dataflow 作业的 Google Cloud 项目的 ID
  • JOB_NAME:您选择的唯一性作业名称
  • VERSION:您要使用的模板的版本

    您可使用以下值:

  • LOCATION:要在其中部署 Dataflow 作业的区域,例如 us-central1
  • JDBC_CONNECTION_URL:JDBC 连接网址
  • SOURCE_SQL_QUERY:需要在源数据库上运行的 SQL 查询
  • DATASET:您的 BigQuery 数据集
  • TABLE_NAME:您的 BigQuery 表名称
  • PATH_TO_TEMP_DIR_ON_GCS:临时目录的 Cloud Storage 路径
  • CONNECTION_PROPERTIES:JDBC 连接属性(如有需要)
  • CONNECTION_USERNAME:JDBC 连接用户名
  • CONNECTION_PASSWORD:JDBC 连接密码
  • KMS_ENCRYPTION_KEY:Cloud KMS 加密密钥

后续步骤