mcpField
B
bigquery-migration-metadata-extractor

bigquery-migration-metadata-extractor

github.com/google数据与数据库24.3k104 次安装1 天前更新
代码仓库

关于 bigquery-migration-metadata-extractor

用于 BigQuery 迁移准备的 Agent 技能,通过 gcloud 提取数据仓库目录元数据和查询历史,不提取表行数据。支持本地运行或临时 Compute Engine VM,适合需要为迁移分析源数据库结构与工作负载的团队。

主要功能

  1. 01提取目录 DDL 元数据
  2. 02提取查询历史日志
  3. 03支持本地或云端运行
  4. 04通过 Cloud Storage 保存 ZIP

适用场景

  1. 01为 SQL 转换和建表收集源架构
  2. 02评估迁移工作负载
  3. 03为查询血缘分析获取历史记录

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/google/skills --skill bigquery-migration-metadata-extractor

安装后在 Claude Code 中输入/bigquery-migration-metadata-extractor确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
extraction_stats_template.py
references/
attribution.md
cloud_extraction.md
extraction_stats_report.md
local_extraction.md

详细介绍

BigQuery 迁移元数据提取

提取过程会通过两条 gcloud 命令运行 DWH 迁移提取器(dwh-migration-dumper),以收集目录 DDL 和查询历史记录,而非表行数据。如果用户想迁移表行(例如 Snowflake COPY INTO 卸载的数据),请询问他们更倾向于使用 BigQuery Data Transfer Service(包括 Snowflake connector),还是导出到 Cloud Storage 后使用 bq load 加载。这两条提取命令都属于 alpha 发布轨道:

命令用途
gcloud alpha bq migration metadata extract目录元数据(元数据连接器)
gcloud alpha bq migration query-logs extract查询历史记录(*-logs 连接器)

两条命令使用相同的参数。gcloud 标志放在前面;提取器自己的标志放在 -- 后面,并会原样传递给提取器:

gcloud alpha bq migration {metadata|query-logs} extract \
    --connector=CONNECTOR --output=gs://BUCKET/PATH/ \
    [--run-mode=local|cloud] [cloud flags] \
    -- [EXTRACTOR FLAGS] [PASSWORD]
  • --connector 和 --output 是必需的 gcloud 标志。--output 是 Cloud Storage 路径(gs://...);本地模式也接受本地文件或目录路径。本技能在两种运行模式下都使用 Cloud Storage。
  • --run-mode=local(默认值)会在此计算机上运行提取器。--run-mode=cloud 会在临时 Compute Engine VM(BigQuery Migration Cloud Extractor)上运行提取器。
  • 数据库标志(--host、--port、--user、--database、--schema、--warehouse、--role、--driver、--assessment、--query-log-* 等)必须放在 -- 后面。放在 -- 前面会报错。
  • 密码的传递方式取决于运行模式(第 4 节):本地模式使用提取器响应文件(@FILE),云端模式则从文件读取 --password。切勿输入明文密码。

重要

这些命令属于 alpha 轨道。如果 gcloud 报告选项无效或命令未知,请先征求用户同意,再更新 Google Cloud CLI,然后重试。使用 gcloud components update 更新;如果 gcloud 是通过 apt 或 yum 等系统软件包管理器安装的(这会禁用组件管理器),则使用该软件包管理器升级 google-cloud-cli 软件包。

使用情况归因

务必阅读:在执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读并遵循使用情况归因中的说明。

开始之前

  1. Google Cloud CLI、身份验证、项目、区域和可用区:确保已安装 Google Cloud CLI,验证 Google Cloud 项目已关联有效的 Cloud Billing 账号,使用用户凭据和 Application Default Credentials 进行身份验证,并配置目标项目、默认区域(例如 us-central1;请在 Google Cloud 位置查看区域服务可用情况)以及该区域中的可用区。云端模式会依次从 --zone、compute/zone 获取 VM 的可用区,若均未设置则使用 us-central1-a;不会读取 compute/region:

    gcloud auth login
    gcloud auth application-default login
    gcloud config set project {project_id}
    gcloud config set compute/region {region}
    gcloud config set compute/zone {zone}
    
  2. 输出存储桶:无论运行模式如何,本技能都会将 ZIP 归档写入一个由该项目拥有且非公开的 Cloud Storage 存储桶(--output)。两种模式下,命令都会在启动提取器之前检查存储桶,因此调用方需要对该存储桶所属项目具有 storage.buckets.list 权限,并对存储桶具有 storage.buckets.getIamPolicy 权限,除非该存储桶启用了公开访问防护。本地模式下,Application Default Credentials 还需要具有在存储桶中创建对象的权限。

  3. 运行模式的先决条件(安装软件或启用 API 前,请先征求用户同意):

    • 本地模式(--run-mode=local):在 PATH 中安装 Java 11 或更高版本(JRE 11+),安装 bqms gcloud 组件;如有需要,提供供应商 JDBC 驱动 JAR(--driver),并确保本地网络可以访问数据库;请参阅本地提取指南。 如果没有终端,提取命令无法提示安装 bqms,因此会失败。用户同意后,请先使用 gcloud components install bqms --quiet 安装(对于通过 apt 或 yum 安装的 gcloud,请改为安装 google-cloud-cli-bqms 软件包)。
    • 云模式(--run-mode=cloud):
      • API:Compute Engine(compute.googleapis.com)、Secret Manager(secretmanager.googleapis.com)、Cloud Storage(storage.googleapis.com)和 Cloud Logging(logging.googleapis.com)。
      • 网络和子网:VPC --network 和 --subnet(默认为 default)需要具备到数据库的路由,且数据库需将 VM 的出站 IP 范围列入允许名单。VM 还需要互联网访问权限,以下载提取器并访问 Google API:请保留默认的外部 IP;或者,在使用 --no-address 时,在 VM 所在区域添加 Cloud NAT。到数据库的 Cloud VPN 或 Cloud Interconnect 路由不能替代此要求。
      • IAM 权限:调用方需要具备创建 VM 和密钥的角色,例如 Compute Admin(roles/compute.admin)和 Secret Manager Admin(roles/secretmanager.admin),以及第 2 项中所述的存储桶权限。使用已准备好的 --gce-service-account 时,调用方还需要在该账号上具备 Service Account User(roles/iam.serviceAccountUser)权限,而该账号本身需要具备云端提取指南中列出的角色。
      • 默认服务账号:如果未提供 --gce-service-account,每次运行都会创建或复用 bqms-cloud-extractor@{project_id}.iam.gserviceaccount.com,并为其授予九个项目角色,包括 roles/editor、roles/compute.admin 和 roles/cloudkms.cryptoKeyDecrypter。这需要 Service Account Admin(roles/iam.serviceAccountAdmin)和 Project IAM Admin(roles/resourcemanager.projectIamAdmin)权限。没有终端时,gcloud 会自动接受其“是否创建?”提示,因此省略 --gce-service-account 前,请先征得用户明确同意;请参阅云端提取指南。
  4. 费用和清理:请查阅 Google Cloud 定价,了解 Compute Engine、Secret Manager 和 Cloud Storage 的费用。云端运行结束后,请删除该次运行创建的 Secret Manager 密钥(第 5 节)。

1. 选择运行模式

 --run-mode=local(默认)--run-mode=cloud(Cloud Extractor)
提取器运行位置本机(需要 Java 运行时)临时 Compute Engine VM
到数据库的网络路径本机网络(VPN、本地部署环境、堡垒机)VM 的 VPC;数据库必须接受来自该 VM 的连接
JDBC 驱动程序任何驱动程序,包括通过 --driver 传入的供应商 JAR仅限提取器捆绑的驱动程序;VM 没有供应商 JAR,也无法读取本地的 --driver 路径
凭据本地提取器读取的 @FILE 响应文件--password(从文件读取)与其他提取器参数一起存储在 VM 读取的 Secret Manager 密钥中
提取器任务失败部分 ZIP 文件仍会写入 --output不会上传 ZIP 文件;运行失败
接下来阅读本地提取指南云端提取指南

在满足以下任一条件时,选择 local:

  • 连接器需要云端 VM 不具备的 JDBC 驱动程序: teradata、teradata-logs、teradata14-logs、oracle、oracle-logs、 oracle-stats、sqlserver、mysql、netezza、vertica、vertica-logs。 在本地,bqms 启动器会自行下载 Oracle、SQL Server 和 MySQL 驱动程序(本地提取器不附带 JDBC 驱动程序,因此启动器也会下载 Snowflake、Redshift、PostgreSQL 和 Greenplum 驱动程序);Teradata、Netezza 和 Vertica 需要 --driver(第 3 节)。
  • 数据库只能从用户的网络访问(本地部署环境、VPN,或无法从 Google Cloud 路由到的 私有端点)。
  • 用户无法在项目中创建 Compute Engine VM、服务账号或密钥。
  • --host 是 localhost、127.0.0.1、::1,或无法从 Google Cloud VPC 路由到的 私有地址。切勿为这些地址使用 --run-mode=cloud;VM 无法访问它们(在 VM 上,127.0.0.1 指向 VM 本身,即使用户声称该地址已配置路由)。请提供可路由的地址;或者,如果用户已接受备用方案,则使用相同的 --output 在本地运行,并移除仅适用于云端的标志。

当数据库可从 Google Cloud 访问(Snowflake、 Redshift、BigQuery、托管在云端的 PostgreSQL/Greenplum、Hive metastore),且用户不希望在本地安装任何内容时,选择 cloud。

告诉用户你选择了哪种运行模式以及原因,例如说明云端模式无法加载供应商 JDBC 驱动程序,也无法访问只能从用户网络访问的数据库。

2. 连接器和命令

每个连接器只提取目录元数据或查询日志其中之一,因此只属于一个命令。运行两个命令即可获取两者。

来源metadata extract 连接器query-logs extract 连接器
Snowflakesnowflake(或 snowflake-account-usage-metadata、snowflake-information-schema-metadata)snowflake-logs(或 snowflake-account-usage-logs、snowflake-information-schema-logs)
Amazon Redshiftredshiftredshift-raw-logs(或 redshift-logs、redshift-serverless-logs)
Teradatateradatateradata-logs(版本 15+)、teradata14-logs
Oracleoracle(DDL)、oracle-stats(用于评估的工作负载统计信息;时间范围由 --query-log-days 设置)oracle-logs
Google BigQuerybigquerybigquery-logs
Greenplumgreenplumgreenplum-logs
Verticaverticavertica-logs
PostgreSQLpostgresql无
SQL Server / Azuresqlserver无
MySQLmysql无
Netezzanetezza无
Apache Hive metastorehiveql无

提示

目录元数据提取速度快(几分钟),且足以满足 SQL 转换、架构创建、Parquet 导出和静态血缘分析的需求。查询日志提取耗时较长,仅在评估工作负载,或追踪未以视图形式存储的查询的血缘关系时需要(例如 dbt 或 Airflow 的 INSERT ... SELECT 作业)。 始终使用 --query-log-start/--query-log-end 或 --query-log-days(置于 -- 之后)限定日志提取范围。

3. 标志

gcloud 标志(位于 -- 之前):

标志运行模式含义
--connector两者必填。必须与命令匹配(第 2 节)。
--output两者必填。gs://BUCKET/PATH/(或 .zip 对象路径)。本地模式也接受本地文件或目录路径。
--run-mode两者local(默认)或 cloud。
--expected-owner两者必须拥有 --output 存储桶的项目(默认为当前项目)。
--endpoint-mode两者标准 gcloud 区域端点选择;除非用户提出要求,否则留空。
--project两者标准 gcloud 项目标志。
--zone、--secret、--network 等仅限云端请参阅云端提取指南。

提取器标志(位于 -- 之后):

标志含义
--host、--port、--url服务器地址,或可覆盖主机和端口的完整 JDBC URL。
--user、@FILE用户名,以及存放密码的响应文件(第 4 节)。
--database、--schema以逗号分隔的列表,用于限定提取范围。postgresql 仅提取第一个 --database,并忽略 --schema;每个数据库运行一次,并分别指定自己的 --output。
--warehouse、--roleSnowflake 会话设置(按会话设置;绝不更改用户默认值)。
--assessmentBigQuery Migration Assessment 的额外数据(向 snowflake 传入 --assessment 时,请省略 --database 和 --schema,因为两者不能同时使用)。仅影响 teradata、teradata-logs、redshift、redshift-raw-logs、snowflake、snowflake-logs、hiveql 和 greenplum-logs 的输出;其他连接器会忽略此标志。
--query-log-start、--query-log-end、--query-log-days*-logs 连接器的查询日志时间范围。
--driver供应商 JDBC 驱动程序 JAR(teradata*、vertica* 和 netezza 必填;本地 bqms 启动器下载驱动程序时可选,用于覆盖)。仅限本地模式。

4. 凭据

切勿在命令行中输入明文密码,也不要要求用户将密码粘贴到聊天中。请用户在自己的终端中运行下面的密码文件命令,并在终端中设置 DB_PASSWORD(例如,在 bash 或 zsh 中运行 read -rs DB_PASSWORD && export DB_PASSWORD),或者以其他方式创建文件,然后只提供文件路径。若未设置 DB_PASSWORD,这些命令会报错停止,而不会写入空密码。具体使用哪种机制取决于运行模式。

本地模式:@FILE 响应文件。 本地提取器会将 @FILE 参数作为 YAML 响应文件读取,并将每个键转换为一个标志,因此,包含 password: ... 的文件会提供 --password,而无需将密码放在命令行中。请以只有用户才能读取的权限写入文件,并将值用单引号括起来(其中任何 ' 都要加倍),以保留特殊字符。这种形式适用于 bash、zsh 和 sh,并假设密码只有一行:

: "${DB_PASSWORD:?DB_PASSWORD is not set}" && umask 077 && printf "password: '%s'\n" "$(printf '%s' "$DB_PASSWORD" | sed "s/'/''/g")" > ./extractor-secret.yaml

在 -- 后传入 @./extractor-secret.yaml(若文件位于当前目录之外,请使用绝对路径,例如 @$HOME/path/file.yaml;@~/... 不会展开)。

云模式:从文件读取 --password。 CLI 会将提取器参数按原样存储在 Secret Manager 中,VM 会使用这些参数运行提取器。VM 无法访问你的本地文件,因此在 VM 上使用 @FILE 参数会失败。请将密码写入只有用户才能读取的文件,并在 -- 后通过命令替换传入:

: "${DB_PASSWORD:?DB_PASSWORD is not set}" && umask 077 && printf '%s' "${DB_PASSWORD}" > ./db_password
-- ... --password="$(cat ./db_password)"

随后,该值会保存在本次运行的 Secret Manager 密钥中(运行后删除,见第 5 节),并且在 gcloud 运行期间会显示在这台机器的进程列表中,因此请使用只有用户才能访问的机器。

如果是你创建的密码文件,请在完成后删除;如果是用户提供的文件,请保留。

5. 快速开始

本地(使用供应商驱动程序的本地部署 Teradata):

gcloud alpha bq migration metadata extract \
    --connector=teradata \
    --output="gs://{bucket}/teradata_metadata/" \
    -- \
    --host="{teradata_host}" \
    --user="{db_user}" \
    --driver="{path_to}/terajdbc4.jar" \
    --assessment \
    @./extractor-secret.yaml

云端(通过 Cloud Extractor 使用 Snowflake):

gcloud alpha bq migration metadata extract \
    --connector=snowflake \
    --output="gs://{bucket}/snowflake_metadata/{run_label}/" \
    --run-mode=cloud \
    --project="{project_id}" \
    --zone="{zone}" \
    --secret="bqms-extractor-creds-{run_label}" \
    -- \
    --host="{account_identifier}.snowflakecomputing.com" \
    --user="{db_user}" \
    --database="{db_name}" \
    --warehouse="{db_warehouse}" \
    --role="{db_role}" \
    --password="$(cat ./db_password)"

--secret 是可选的。如果不指定,CLI 会创建 bqms-extractor-creds-run-EPOCH_SECONDS,打印其名称,并为其添加标签 goog-bqms-extractor-run-id。如果传入 --secret,每次运行都要使用新的 {run_label}:如果密钥已存在,CLI 只会添加一个版本,之后删除该密钥也会同时删除它之前的版本。

每次云端运行都要指定一个尚无 .zip 文件的 --output 前缀,例如新的 {run_label} 文件夹。gcloud 只要在 --output 下找到任何非空 .zip 文件,就会报告成功,而不会检查文件的写入时间。如果那里有较早的归档文件(来自先前的元数据、查询日志或本地运行),命令就会立即以 Extraction complete 结束,而此时新 VM 仍在启动;此时删除密钥会导致实际运行失败。如果用户指定了前缀,请先检查 gcloud storage ls "gs://{bucket}/{path}/" 是否未列出任何 .zip,确认后按原样使用该前缀;否则请建议使用新的子前缀。

每个会运行或建议运行提取的回答,都必须按以下顺序包含这些步骤及其命令:

  1. 检查退出代码和任务摘要(第 6 节第 1 步)。
  2. 使用统计信息模板验证输出(第 6 节第 2 步):cp <SKILL_DIR>/assets/extraction_stats_template.py ./extraction_stats.py && python3 ./extraction_stats.py --input "gs://{bucket}/{path}/"。
  3. 云端运行后,在完成第 1 和第 2 步后删除本次运行的 Secret Manager 密钥(如果运行失败,则立即删除),并说明原因:该密钥仍保存着数据库密码。如果传入了 --secret,请删除该名称对应的密钥:gcloud secrets delete bqms-extractor-creds-{run_label} --project={project_id} --quiet。否则,请删除命令打印出的自动命名密钥 bqms-extractor-creds-run-EPOCH_SECONDS,或使用 gcloud secrets list --filter="labels.goog-bqms-extractor-run-id:*" 查找。只删除为本次运行创建的密钥;如果用户要求重复使用现有密钥,请在运行前记录其最新版本,并且只销毁本次运行新增的版本。请参阅云端提取指南的清理部分。
  4. 删除你创建的 extractor-secret.yaml 或 db_password;如果文件由用户提供,则保留不动。

6. 检查结果

  1. 退出代码和任务摘要。 任何必需任务失败时,提取器都会以 1 退出。具体含义取决于运行模式:

    • 本地: gcloud 会报告 BigQuery Migration Extractor failed with exit code 1,但提取器已经将 ZIP 写入 --output,其中每项失败都会有一个 *.exception.txt 条目。出现此错误后若已有 ZIP,即表示部分成功,不应因此重新运行。
    • 云端: 只有提取器以 0 退出时,VM 才会上传 ZIP,因此只有在运行前 --output 下没有 .zip 文件时,Extraction complete 才表示成功(第 5 节)。如果任何必需任务失败,就不会上传任何内容,gcloud 会报告 Extraction finished, but no non-empty artifact was found。务必告知用户接下来的两步:查看 VM 日志,了解提取器失败的原因;然后修复原因并重新运行,或使用 --run-mode=local 重新运行,以保留部分 ZIP。只有在找到错误条目时,gcloud 才会打印 gcloud logging read 'resource.type="gce_instance" AND resource.labels.instance_id="..."' 命令;否则,请根据 Instance Link: 行中的 VM 名称查询日志(参阅云端提取指南中的监控部分)。此外,还要删除本次运行的密钥(第 5 节)。 对于本地的不完整 ZIP,请查看 N TASKS SUCCEEDED / N TASKS FAILED 摘要和异常条目(unzip -l {archive}.zip '*.exception.txt' 会列出失败的任务;每个文件都很长,因此只需读取错误信息:unzip -p {archive}.zip '{task}.exception.txt' | grep -m 3 -E '^\s*message:')。如果同一任务的特定版本回退任务已成功,则该失败无碍;回退任务带有版本后缀,例如在 PostgreSQL 11 及更高版本中,已填充数据的 functions-11.csv 旁边会有 functions.csv.exception.txt。
  2. 存档完整性和统计信息。 将 提取统计信息模板 (<SKILL_DIR>/assets/extraction_stats_template.py,其中 <SKILL_DIR> 是包含此 SKILL.md 的目录)复制到工作目录,然后对 ZIP、其文件夹或 GCS 前缀运行:

    cp <SKILL_DIR>/assets/extraction_stats_template.py ./extraction_stats.py
    python3 ./extraction_stats.py --input "gs://{bucket}/snowflake_metadata/"
    

    如果 gs:// 形式运行失败,请使用 gcloud storage cp 将 ZIP 复制到本地,然后对本地文件运行脚本。

    脚本会拒绝不完整的存档(22 字节的占位文件),并报告提取器遥测状态、数据库、架构、基表、视图和列的数量、基表行数和字节大小总计、按架构和表划分的明细,以及列数据类型分布。完整报告指标和 # CUSTOMIZE: 扩展点请参阅 统计报告规范(例如,编辑 _EXCLUDED_SYSTEM_SCHEMAS 或 _should_include_schema() 以排除 STAGING_TMP 架构)。

说明

脚本会根据 Snowflake、Redshift(svv_*)和 Teradata(dbc.*V)目录布局计算对象、行和字节数;对于 BigQuery 的 tables.jsonl,则会统计表、视图和顶层列的数量(该连接器不会记录行数和大小,因此这些值显示为 N/A)。如果存档中包含 dumper-telemetry.jsonl,脚本会从中读取运行状态。对于其他布局(例如 PostgreSQL、Oracle 或 Hive 的 tables.jsonl),脚本仍会验证存档并报告连接器和主机,但对象计数为零,运行状态可能显示为 UNKNOWN。在 PostgreSQL 11 及更高版本中,脚本会显示 FAILURE,这是因为 functions.csv 和 aggregates.csv 的回退任务虽失败但无碍(第 6 节,步骤 1)。此时请使用提取命令打印的任务摘要来查看运行状态,并从连接器自己的文件中统计对象(第 7 节)。

7. 输出归档

除非 --output 指定了 .zip 对象,否则对于 metadata extract 连接器,提取器会将 ZIP 命名为 dwh-migration-{connector}-metadata.zip;对于 query-logs extract 连接器,则命名为 dwh-migration-{connector}.zip,这些连接器的名称本身已以 -logs 结尾: snowflake 会生成 dwh-migration-snowflake-metadata.zip,而 snowflake-logs 会生成 dwh-migration-snowflake-logs.zip。少数名称有所不同(oracle-stats 会生成 dwh-migration-oracle-stats.zip;hiveql 和使用 --assessment 提取的查询日志会附加 -YYYYMMDDTHHMMSS 时间戳),因此请列出 --output 以查找归档。每个归档都包含 compilerworks-metadata.yaml(提取器 版本和参数)以及连接器专属的 CSV 文件:

dwh-migration-snowflake-metadata.zip
├── databases-au.csv            # Databases and owners
├── schemata-au.csv             # Schemas
├── tables-au.csv               # Tables, row counts, byte sizes
├── columns-au.csv              # Columns, ordinal positions, types, nullability
├── views-au.csv                # View DDL
├── functions-au.csv            # User-defined and external functions
├── external_tables.csv         # External stage tables
├── snowflake.yaml              # Assessment flag and warehouse count
├── compilerworks-metadata.yaml # Extractor version and flags
└── dumper-telemetry.jsonl      # Task timings

dwh-migration-snowflake-logs.zip
├── query_history_2026-08-05T000000Z.csv   # One file per rotation window
├── ...
└── compilerworks-metadata.yaml

dwh-migration-postgresql-metadata.zip
├── database.csv                # Databases on the server
├── is_columns_private.csv      # Columns of user tables and views
├── pg_views_private.csv        # User view DDL
├── functions-11.csv            # Functions on search_path (11+; drop pg_catalog)
├── aggregates-11.csv, types.csv, casts.csv
├── is_columns_generic.csv, pg_views_generic.csv   # System catalog objects
├── pg_user.csv                 # Roles and privileges (passwords masked)
├── *.csv.exception.txt         # One per failed task
└── compilerworks-{metadata.yaml,arguments.txt,version.txt,format.txt}

在 PostgreSQL 归档中,*_private.csv 文件包含用户对象,*_generic.csv 文件包含 系统对象。is_columns_private.csv 包含视图列;从中减去 pg_views_private.csv 中的视图,即可统计基表数量。 functions-11.csv、aggregates-11.csv 和 types.csv 仅列出会话 search_path 上可见的对象(默认值为 "$user", public),因此不会包含其他架构中的函数和类型。若要包含这些对象,请将 --host、 --port 和 --database 替换为 --url="jdbc:postgresql://{host}:{port}/{db_name}?currentSchema={schema1},{schema2},public"。

归档中绝不会包含数据库密码:要确认这一点,请检查 compilerworks-arguments.txt 和 compilerworks-metadata.yaml 中没有 password 条目(若密码是常见词语,通过扫描密码值无法可靠判断);不过其中确实包含对象 DDL 和角色列表,而 dumper-telemetry.jsonl 是从 ~/.cache/DWH-Dumper/all-dumper-telemetry.jsonl 复制而来,因此可能包含此前在同一台机器上运行提取器时记录的连接器、主机和错误信息。请将这些文件视为敏感信息,并将其保存在私有存储桶中。

8. 下游 BigQuery 工作流

每次云端运行都会写入各自的 --output 前缀(第 5 节)。若要将归档一起移交,请将已完成的 ZIP 文件复制到一个共享前缀,例如 gcloud storage cp "gs://{bucket}/{run_prefix}/*.zip" "gs://{bucket}/assessment/",切勿将该共享前缀用作云端 --output。然后:

  1. BigQuery 迁移评估:引导用户前往 Google Cloud Console 中的 BigQuery > Migration > Assessment,并提供包含元数据(使用 --assessment 提取)和日志的 GCS 前缀。
  2. 批量 SQL 转换:在 BigQuery > Migration > SQL translation 中附加元数据 ZIP 作为架构上下文,或通过 BigQuery Migration API / BQMS MCP 工具完成(参见 bigquery-migration-sql-translator)。
  3. 表数据传输(不在范围内):此技能仅提取目录元数据和查询日志。如果用户要求导出或加载表行数据(例如 Snowflake COPY INTO 卸载),请询问他们是否想使用 BigQuery Data Transfer Service(包括 Snowflake transfer connector),或将数据导出为 Parquet/CSV 到 Cloud Storage,再通过 bq load 加载。

评论

支持 Markdown