# Google BigQuery

您可以使用 Google BigQuery 作为数据管道或复制任务中的目标数据平台。在数据管道中，可以在目标平台上执行各种 ELT 操作，包括存储数据、转换数据、创建数据集市和注册数据。另一方面，复制任务涉及将数据直接从源系统复制到具有基本转换功能的目标系统，但不支持 ELT 操作。

将 Google BigQuery 设置为目标涉及：

* [满足先决条件](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/bigquery-target.htm#Prerequi2)
* 配置到 Google BigQuery 的连接

## 配置到 Google BigQuery 的连接

要配置连接器，请执行以下操作：

1. 在连接中，单击创建连接。

2. 选择 Google BigQuery 目标连接器，然后提供以下设置：

### 数据目标

#### 数据网关

信息注释此字段不适用于 Qlik Talend Cloud Starter 订阅，因为此订阅层不支持 数据移动网关。

只有当目标数据库无法从 Qlik Cloud 访问时（例如，如果它位于或虚拟专用云中），才需要 数据移动网关，并且只能使用私有链接访问。如果是这种情况，请选择要通过其访问目标数据库的 数据移动网关。

根据您的使用情况，这将和从数据源移动数据时部署的 数据移动网关 相同，或者与之不同。

有关 数据移动网关 用例的信息，请参阅 [什么时候需要 数据移动网关？](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) 和 [常见用例](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)。

如果可以直接从 Qlik Cloud 访问目标数据库，请选择无。

信息注释通过 数据移动网关 访问目标数据库时，还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息，请参阅下面的 [Google BigQuery](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/bigquery-target.htm#Driver)。

### 连接属性

服务帐户密钥：上传在创建 BigQuery 服务帐户密钥时下载的 JSON 文件。

位置：将 Qlik 创建的数据集上传到的位置。如果选择其他，请在区域名称字段中输入区域名称。有关支持的区域名称列表，请参阅 [BigQuery 位置](https://cloud.google.com/bigquery/docs/locations)。

信息注释选择其他 需要 数据移动网关 2023.11.4 或更高版本。

### 名称

连接的显示名称。

## 先决条件

### 登陆数据所需的权限

自动创建目标数据集所需的权限：

如果要自动创建数据集，则需要以下权限：

BigQuery &gt; BigQuery Job User

BigQuery &gt; BigQuery Data Editor

目标数据集已存在时所需的权限：

如果数据集已存在，您需要执行以下步骤：

1. 创建具有以下权限的服务帐户：

   BigQuery &gt; BigQuery Job User

2. 导航到要使用的数据集，然后：

   1. 将刚刚创建的服务帐户添加为主体。

   2. 分配 BigQuery Data Editor 角色。

### 驱动程序设置

仅当通过 数据移动网关 访问数据库时才需要驱动程序。在这种情况下，您需要在 数据移动网关 计算机上安装驱动程序。

您可以使用驱动程序安装实用程序（推荐）安装 driver 或手动安装。只有在您遇到驱动程序安装实用程序发生问题的少见情况下，才应尝试手动安装。

#### 使用驱动程序安装实用程序安装驱动程序

本部分介绍如何安装所需的 driver。这个过程包括运行一个脚本，该脚本将自动下载、安装和配置所需的 driver。您还可以根据需要运行脚本来更新和卸载 driver。

准备安装

* 请确保在 数据移动 网关服务器上安装了 Python 3.6 或更高版本。

  Python 预装在大多数 Linux 发行版上。您可以通过运行以下命令来检查系统上安装了哪个 Python 版本。

  python3 --version

安装 driver

下载并安装 driver ：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./install gbq

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 install gbq 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。

   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。

   * 键入“v”并按 [Enter] 以再次查看 EULA。

   将会安装 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

更新 driver

如果要在安装提供的 driver 之前卸载以前版本的 driver，请运行 update 命令。

下载并更新 driver：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./update gbq

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 update gbq 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
   * 键入“v”并按 [Enter] 可从头开始查看 EULA。

   将卸载旧的 driver，并安装新的 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

卸载 driver

如果要卸载 driver，请运行 uninstall 命令。

卸载 driver：

1. 停止所有配置为使用此连接器的任务。

2. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

3. 然后运行以下命令：

   语法：

   ./uninstall gbq

   将卸载 driver。

#### 手动安装驱动程序

只有在自动驱动程序安装未成功完成的情况下，才应尝试手动安装 driver。

您需要同时安装 ODBC 驱动程序和 JDBC 驱动程序。

安装 ODBC 驱动程序

安装 数据移动网关 后，下载 SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;-Linux.tar.gz 和 google-cloud-sdk-&lt;version&gt;-linux-x86\_64.tar.gz 文件。您可以在 /opt/qlik/gateway/movement/drivers/manifests/gbq.yaml. 中的 binary-artifacts 下找到这些文件的直接下载链接。下载完成后，将文件复制到 数据移动网关 计算机。

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. （可选）确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 将：

   SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;.tar.gz

   提取到：

   /opt/SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;-Linux

4. 将文件 GoogleBigQueryODBC.did 和 simba.googlebigqueryodbc.ini 移动到 Simba ODBC 驱动程序目录下的 lib 目录中。

   示例：

   将文件从：

   /opt/SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;-Linux/setup

   移动到：

   /opt/SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;-Linux/SimbaODBCDriverforGoogleBigQuery64\_&lt;version&gt;/lib

5. 按如下方式编辑 simba.googlebigqueryodbc.ini 文件：

   1. 将 ` ErrorMessagesPath  ` 更改为包含 ODBC 消息的 XML 文件的路径。默认位置为：

      `ErrorMessagesPath=/opt/SimbaODBCDriverforGoogleBigQuery_<version>-Linux/SimbaODBCDriverforGoogleBigQuery64_<version>/ErrorMessages`

   2. 将 `DriverManagerEncoding` 更改为 `UTF-16`。

6. 将以下路径添加到位于 数据移动网关 bin 目录中的 site\_arep\_login.sh 文件中：

   export LD\_LIBRARY\_PATH=$LD\_LIBRARY\_PATH:/opt/SimbaODBCDriverforGoogleBigQuery\_&lt;version&gt;-Linux/SimbaODBCDriverforGoogleBigQuery64\_&lt;version&gt;/lib

7. 编辑 /etc/odbcinst.ini 文件并添加驱动程序路径（即安装驱动程序的路径）：

   `[ODBC Drivers]`

   `Simba= Installed`

   `Simba ODBC Driver for Google BigQuery = Installed`

   `[Simba ODBC Driver for Google BigQuery]`

   `Description=Simba ODBC Driver for Google BigQuery(64-bit)`

   `Driver=/opt/SimbaODBCDriverforGoogleBigQuery_<version>-Linux/SimbaODBCDriverforGoogleBigQuery64_<version>/lib/libgooglebigqueryodbc_sb64.so`

8. 安装 google-cloud-sdk-&lt;version&gt;-linux-x86\_64.tar.gz。

9. 启动 数据移动网关 服务：

   sudo systemctl start repagent

10. （可选）确认服务已启动：

    sudo systemctl status repagent

    状态应如下所示：

    Active: active (running) since &lt;timestamp&gt; ago

安装 JDBC 驱动程序及其依赖项

1. 下载 /opt/qlik/gateway/movement/drivers/manifests/gbq.yaml 中 binary-artifacts 下列出的以下 ZIP 文件和 JAR 文件：

   * https://repo1.maven.org/maven2/com/google/cloud/google-cloud-bigquery/&lt;version&gt;/google-cloud-bigquery-&lt;version&gt;.jar
   * https://repo1.maven.org/maven2/com/google/cloud/google-cloud-storage/&lt;version&gt;/google-cloud-storage-&lt;version&gt;.jar
   * https://storage.googleapis.com/simba-bq-release/jdbc/SimbaJDBCDriverforGoogleBigQuery&lt;version&gt;.zip

   将 JAR 文件复制到 数据移动网关 计算机上的以下文件夹，并将 SimbaJDBCDriverforGoogleBigQuery&lt;version&gt;.zip 中的 JAR 文件提取到同一文件夹：

   /opt/qlik/gateway/movement/qcs\_agents/qdi-db-commands/lib

2. 通过运行 [重新启动服务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-managing.htm#Restarti2) 中描述的命令来重新启动 数据移动网关 服务。

### 端口

需要为出站通信打开防火墙端口 443。

## 数据类型

参数化数据类型长度将设置为默认值：

* STRING：8192（长度）

* BYTES：8192（长度）

* NUMERIC：精确度：38，小数位数：9

* BIGDECIMAL：精确度：76，小数位数：38

下表显示了使用 Qlik Cloud 时支持的 Google BigQuery 数据类型以及从 Qlik Cloud 数据类型的默认映射。

本机数据类型信息将被保留，并显示在数据集视图的本机数据类型列中。如果列不可见，则需要打开数据集视图的列选择器，然后选择本机数据类型列。

支持的数据类型

| Qlik Cloud 数据类型 | Google BigQuery 数据类型 |
| --- | --- |
| BOOLEAN | BOOL |
| BYTES | BYTES（以字节为单位的长度） |
| DATE | DATE |
| TIME | TIME |
| DATETIME | TIMESTAMP<br><br>如果小数位数 &gt; 7：STRING(37)<br><br>否则，精确度始终为 6，即使输入列使用的精确度低于 6 也是如此。 |
| INT1 | TINYINT |
| INT2 | SMALLINT |
| INT4 | INTEGER |
| INT8 | BIGINT |
| NUMERIC | NUMERIC（精确度，小数位数） |
| REAL4 | FLOAT64 |
| REAL8 | FLOAT64 |
| UINT1 | TINYINT |
| UINT2 | SMALLINT |
| UINT4 | INTEGER |
| UINT8 | BIGINT |
| STRING | STRING<br><br>如果子类型为 JSON，则为：<br><br>JSON |
| WSTRING | STRING<br><br>如果子类型为 JSON，则为：<br><br>JSON |
| BLOB | BYTES |
| NCLOB | STRING<br><br>如果子类型为 JSON，则为：<br><br>JSON |
| CLOB | STRING<br><br>如果子类型为 JSON，则为：<br><br>JSON |
| ARRAY | STRING |
| STRUCT | STRING |
| GEOGRAPHY | STRING |
| JSON | JSON |

## 所有数据任务的限制和注意事项

* 不支持以下 DDL：

  * 删除列
  * 重命名列
  * 更改列数据类型

* 不支持从没有主键或唯一索引的源表中捕获更改。如果需要从此类表中捕获更改，可以使用转换添加主键。此外，主键或唯一索引列不能包含 NULL。如果您知道此类列将填充 NULL 值，请定义转换以将 NULL 更改为不可为空的值。

* 不支持将 JSON 字段作为主键。

## 仅针对复制任务的限制和注意事项

* 不支持 事务性 应用更改模式。

* 使用以下任务设置配置时，复制任务将执行 DELETE 操作，然后执行 INSERT，而不是 UPDATE：

  * 应用更改模式设置为 批处理优化。

  * 未选择 使用 SQL MERGE 应用更改 选项。

  * 应用冲突的 UPDATE 错误处理 设置为：找不到应用 UPDATE 的记录：INSERT 缺失的目标记录。

  由于 Google Cloud BigQuery 不支持回滚，如果复制任务无法插入更新的行，数据将从目标中删除。