# Google BigQuery

您可以使用 Google BigQuery 作為資料管道或複寫任務中的目標資料平台。在資料管道中，可以在目標平台執行各種 ELT 操作，包括儲存資料、轉換資料、建立資料超市和註冊資料。另一方面，複寫任務涉及將資料直接從來源系統複寫至具有基本轉換功能但不支援 ELT 操作的目標系統。

將 Google BigQuery 設定為目標包含以下步驟：

* [滿足先決條件](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/bigquery-target.htm#Prerequi2)
* 設定與 Google BigQuery 的連線

## 設定與 Google BigQuery 的連線

若要設定連接器，請執行以下操作：

1. 在 連線 中，按一下 建立連線。

2. 選取 Google BigQuery 目標連接器，然後提供以下設定：

### 資料目標

#### 資料閘道

資訊備註此欄位無法用於 Qlik Talend Cloud 啟動器 訂閱，因為此訂閱層級不支援 資料移動閘道。

只有在無法從 Qlik Cloud 存取目標資料庫且只能使用私人連結存取時 (例如若將在虛擬私人雲端中)，才需要 資料移動閘道。在此情況下，選取您要用來存取目標資料庫的 資料移動閘道。

根據您的使用情況，這會是為了從資料來源移動資料而部署的相同或不同 資料移動閘道。

如需關於 資料移動閘道 使用案例的資訊，請參閱 [何時需要 資料移動閘道？](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) 和 [常見使用案例](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)。

如果可以直接從 Qlik Cloud 存取目標資料庫，請選取 無。

資訊備註透過 資料移動閘道 存取目標資料庫時，您還需要在 資料移動閘道 機器上安裝適當的驅動程式。如需詳細資訊，請參閱下方的 [Google BigQuery](https://help.qlik.com/zh-TW/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 或更高版本安裝於 Data Movement 閘道伺服器。

  Python 會預先安裝在大部分的 Linux 發行版。您可以執行下列命令，以查看哪個 Python 版本安裝在您的系統上：

  python3 --version

安裝 driver

若要下載並安裝 driver：

1. 停止 Data Movement gateway 服務：

   sudo systemctl stop repagent

2. 可自選，確認服務已停止：

   sudo systemctl status repagent

   狀態應如下所示：

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

3. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

4. 執行下列命令：

   語法：

   ./install gbq

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 install gbq 命令。

   否則，就會顯示 driver 的 EULA。

5. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

6. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。

   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。

   * 輸入「v」並按下 [Enter] 以再次檢視 EULA。

   將會安裝 driver。

7. 等待安裝完成 (以「完成！」指示)，然後開始 Data Movement gateway 服務：

   sudo systemctl start repagent

8. 可自行選擇確認服務已開始：

   sudo systemctl status repagent

   狀態應如下所示：

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

更新 driver

若您想要在安裝提供的 driver 之前解除安裝先前的 driver 版本，請執行更新命令。

若要下載並更新 driver：

1. 停止 Data Movement gateway 服務：

   sudo systemctl stop repagent

2. 可自選，確認服務已停止：

   sudo systemctl status repagent

   狀態應如下所示：

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

3. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

4. 執行下列命令：

   語法：

   ./update gbq

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 update gbq 命令。

   否則，就會顯示 driver 的 EULA。

5. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

6. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。
   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。
   * 輸入「v」並按下 [Enter] 以從頭檢閱 EULA。

   將會解除安裝舊版 driver，並安裝新版 driver。

7. 等待安裝完成 (以「完成！」指示)，然後開始 Data Movement gateway 服務：

   sudo systemctl start repagent

8. 可自行選擇確認服務已開始：

   sudo systemctl status repagent

   狀態應如下所示：

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

解除安裝 driver

若您想要解除安裝 driver，請執行解除安裝命令。

若要解除安裝 driver：

1. 停止設定為使用此連接器的所有任務。

2. 在 Data Movement 閘道機器上，將工作目錄變更為：

   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. 停止 Data Movement gateway 服務：

   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. 將以下路徑新增至位於 Data Movement gateway 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. 啟動 Data Movement gateway 服務：

   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-TW/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 |

## 所有資料任務的限制和考慮事項

* 不支援在沒有主要金鑰或唯一索引的情況下從來源表格擷取變更。如果您需要從此類表格中擷取變更，可以新增主要金鑰 使用轉換。此外，主要金鑰或唯一索引欄不能包含 NULL。如果您知道此類欄將填入 NULL 值，請定義轉換以將 NULL 變更為不可為 null 的值。

* 不支援將 JSON 欄位作為主索引鍵。

## 僅複寫任務的限制和考慮事項

* 不支援交易套用變更模式。

* 透過下列任務設定配置，複寫任務將執行 DELETE (刪除) 操作，然後執行 INSERT (插入) 而不是 UPDATE (更新)：

  * 套用變更模式設定為批次最佳化。

  * 未選取使用 SQL MERGE 套用變更選項。

  * 套用衝突的 UPDATE 錯誤處理設定為：找不到套用 UPDATE 的記錄：INSERT 缺少的目標記錄。

  由於 Google Cloud BigQuery 不支援回復，因此如果複寫任務無法插入更新的列，將會從目標刪除資料。