keboola/storage-driver-bigquery

Keboola BigQuery 驱动器

v7.8.3 2024-08-23 07:26 UTC

README

Keboola 高级 Big Query 存储后端驱动程序

安装依赖项。

docker compose run --rm dev composer install

设置 Big Query

安装 Google Cloud 客户端(通过 Brew),初始化它并登录到 生成默认凭据

使用 Terraform 模板 准备后端。在 KBC Team Dev(id: 431160969986) 文件夹中创建子文件夹,并将文件夹填充到 terraform 命令中。

  1. 连接存储库 获取缺少的部分(组织 ID 和账单 ID)。
  2. (可选)将 bq-storage-backend-init.tf 从项目目录移出,以便新的文件将位于 git 之外
  3. 运行 terraform init
  4. 运行 terraform apply -var folder_id=[folder_id] -var billing_account_id=[billing_id] -var backend_prefix=<your prefix, eg. kbc-js> -var file_storage_backend_region=<desired region>(例如 us-central1 区域)
    1. 可选地设置 terraform.tfvars 文件,其中预定义了 terraform.tfvars.dist 文件中的变量
  5. 已创建新密钥文件 principal_key.jsonbig_query_key.json
  6. 通过运行 php SetBQVars.php 并停止,或手动提取来设置来自 principal_key.jsonbig_query_key.json 的环境变量。
  7. 打开 principal_key.json,将 private_key 的内容设置为变量 BQ_SECRET,并将其从 json 文件中删除(整个条目)
    1. 注意:即使带有引号和新行,也只需简单复制粘贴整个内容 -> 你的 .env 将如下所示 BQ_SECRET="-----BEGIN PRIVATE KEY-----XXXXZQ==\n-----END PRIVATE KEY-----\n"
  8. 删除其余密钥文件(不包括 private_key 条目)中的换行符,并将其设置为变量 BQ_PRINCIPAL 传递给 .env
    1. 您可以使用 awk -v RS= '{$1=$1}1' principal_key.json 将密钥转换为字符串
  9. 删除 big_query_key.json 密钥文件中的换行符,并将其设置为变量 BQ_KEY_FILE 传递给 .env
    1. 您可以使用 awk -v RS= '{$1=$1}1' big_query_key.json 将密钥转换为字符串

最后,您的 .env 文件应如下所示...

# the id is printed by terraform at the end and it is just the numbers after `folders/`

BQ_PRINCIPAL=<the content of the principal_key.json key file as single line without private_key entry>
BQ_SECRET=<private_key from principal_key.json key file (taken from BQ_PRINCIPAL)>

BQ_FOLDER_ID=<TF output file_storage_bucket_id : the id of the created folder, just the number, without /folders prefix>
BQ_BUCKET_NAME=<TF output file_storage_bucket_id : bucket id created in main project>

# choose different BQ_STACK_PREFIX than you Terraform prefix otherwise project created by Terraform will be deleted . e.g. local :)
BQ_STACK_PREFIX=local

BQ_KEY_FILE=<big_query_key.json file owned by main service acc>

全部完成。现在您可以尝试运行 composer loadGcs 脚本并执行测试。

docker compose run --rm dev composer loadGcs

构建 Docker 镜像

docker compose build

Xdebug

要使用 xdebug 运行,请使用 dev-xdebug 容器而不是 dev

测试

使用以下命令运行测试。

# This will run all tests
docker compose run --rm dev composer tests
# This will run all tests in parallel
docker compose run --rm dev composer paratest
# This will run import tests in parallel
docker compose run --rm dev composer paratest-import
# This will run export tests in parallel
docker compose run --rm dev composer paratest-export
# This will run all tests in parallel excluding import and export
docker compose run --rm dev composer paratest-other

要禁用重试,请复制 phpunit-retry.xml.dist

cp phpunit-retry.xml.dist phpunit-retry.xml

代码质量检查

#run all bellow but not tests
docker compose run --rm dev composer check

#phplint
docker compose run --rm dev composer phplint

#phpcs
docker compose run --rm dev composer phpcs

#phpcbf
docker compose run --rm dev composer phpcbf

#phpstan
docker compose run --rm dev composer phpstan

完整的 CI 工作流程

此命令将运行所有检查并运行测试

docker compose run --rm dev composer ci

使用

项目 ID:您的项目的全局唯一标识符。此库创建项目 ID 作为 CreateProjectCommand 中的 stackPrefixprojectId 的组合

项目 ID 是用于区分您的项目与 Google Cloud 中所有其他项目的唯一字符串。您可以使用 Google Cloud 控制台生成项目 ID,或者您可以自己选择。您只能在创建项目时修改项目 ID。

项目 ID 要求

  • 长度必须是6到30个字符。
  • 只能包含小写字母、数字和短横线。
  • 必须以字母开头。
  • 不能以短横线结尾。
  • 不能正在使用或之前已使用;这包括已删除的项目。
  • 不能包含受限制的字符串,例如 googlessl

许可证

MIT许可证,请参阅LICENSE文件。