將 Google Play 資料載入 BigQuery

您可以使用 Google Play 適用的 BigQuery 資料移轉服務連接器,將資料從 Google Play 載入 BigQuery。透過 BigQuery 資料移轉服務,您可以安排週期性移轉工作,將 Google Play 的最新資料新增至 BigQuery。

支援的報表

Google Play 專用的 BigQuery 資料移轉服務支援下列月報表選項:

詳細報表

匯總報表

如要瞭解 Google Play 報表如何轉換成 BigQuery 表格,請參閱 Google Play 報表轉換一文。

報表選項 支援
支援的 API 版本

不適用

重複頻率

每天,時間是資料移轉作業最初的建立時間 (預設)

您可以設定時間。

重新整理視窗

最近 7 天

無法設定

補充作業時間長度上限

無限制

Google Play 沒有已知的資料保留限制,但 BigQuery 資料移轉服務對於單一補充作業可要求的天數設有限制。如需補充作業的相關資訊,請參閱手動觸發移轉作業一節。

從 Google Play 轉移作業擷取資料

從 Google Play 移轉資料至 BigQuery 時,系統會將資料載入依日期分區的 BigQuery 資料表。資料載入的資料表分區會對應至資料來源的日期。如果為同一天排定多項移轉作業,BigQuery 資料移轉服務會以最新資料覆寫該特定日期的資料分割。同一天內多次轉移資料或執行回填作業,不會導致資料重複,其他日期的分區也不會受到影響。

重新整理視窗

更新期是指資料移轉作業在執行時,擷取資料的天數。舉例來說,如果重新整理時間範圍為三天,且每天都會進行移轉,BigQuery 資料移轉服務就會從來源資料表擷取過去三天的所有資料。在這個範例中,每天進行移轉時,BigQuery 資料移轉服務會建立新的 BigQuery 目的地資料表分割區,並複製當天的來源資料表資料,然後自動觸發回填執行作業,以更新過去兩天的來源資料表資料。系統自動觸發的回填作業會覆寫或增量更新 BigQuery 目的地資料表,具體做法取決於 BigQuery 資料移轉服務連接器是否支援增量更新。

首次執行資料移轉時,資料移轉作業會擷取重新整理視窗內的所有可用來源資料。舉例來說,如果重新整理時間範圍為三天,且您是第一次執行資料移轉作業,BigQuery 資料移轉服務會擷取三天內的所有來源資料。

重新整理視窗會對應至 TransferConfig.data_refresh_window_days API 欄位

如要擷取重新整理時間範圍外的資料 (例如歷來資料),或從任何轉移中斷或缺漏中復原資料,您可以啟動或排定補充作業

限制

  • 資料移轉作業的最低排程頻率為每 24 小時一次。根據預設,移轉作業會在您建立移轉作業時啟動。不過,您可以在設定轉移作業時,設定轉移作業的開始時間。
  • 在 Google Play 移轉期間,BigQuery 資料移轉服務不支援增量資料移轉。指定資料移轉日期後,系統會移轉該日期可用的所有資料。

事前準備

建立 Google Play 資料移轉作業前,請先:

  • 確認您已完成啟用 BigQuery 資料移轉服務的一切必要動作。
  • 建立 BigQuery 資料集以儲存 Google Play 資料。
  • 尋找您的 Cloud Storage bucket:
    1. Google Play 管理中心,按一下 「下載報表」,然後選取「評論」、「統計資料」或「財務」
    2. 如要複製 Cloud Storage 值區的 ID,請按一下「複製 Cloud Storage URI」。值區 ID 的開頭是 gs://。舉例來說,如果是評論報表,您的 ID 類似於以下內容:
      gs://pubsite_prod_rev_01234567890987654321/reviews
    3. 如要轉移 Google Play 資料,只需複製 gs:///reviews 之間的唯一 ID:
      pubsite_prod_rev_01234567890987654321
  • 如要為 Pub/Sub 設定移轉作業執行通知,您必須擁有 pubsub.topics.setIamPolicy 權限。如果您只想設定電子郵件通知,則不需要擁有 Pub/Sub 權限。詳情請參閱 BigQuery 資料移轉服務執行通知一文。

所需權限

  • BigQuery:確認建立資料移轉作業的人員在 BigQuery 中具有下列權限:

    • 建立資料移轉作業的 bigquery.transfers.update 權限
    • 目標資料集的 bigquery.datasets.getbigquery.datasets.update 權限

    bigquery.admin 這個預先定義的 IAM 角色具備 bigquery.transfers.updatebigquery.datasets.updatebigquery.datasets.get 權限。如要進一步瞭解 BigQuery 資料移轉服務中的身分與存取權管理角色,請參閱存取權控管

  • Google Play:確認您在 Google Play 中具有以下權限:

    該 Google Cloud 團隊「無法」代表您產生 Google Play 檔案或授予該檔案的存取權。如需存取 Google Play 檔案的說明,請參閱「與 Google Play 支援團隊聯絡」一文。

設定 Google Play 轉移作業

如要設定 Google Play 資料移轉作業,您必須擁有:

  • Cloud Storage 值區。如需找出 Cloud Storage bucket 的步驟,請參閱「事前準備」一節。 Cloud Storage 值區的開頭是 pubsite_prod_rev。例如:pubsite_prod_rev_01234567890987654321
  • 資料表後置字串:在載入同一資料集的所有資料來源標上易記名稱。後置字串可用於防止不同的移轉作業寫入同一個資料表。所有將資料載入同個資料集的移轉工作,其資料表後置字串都不能重複,並且後置字串應盡量簡短,避免產生過於冗長的資料表名稱。

如要設定 Google Play 資料移轉作業,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「資料移轉」頁面。

    前往「資料移轉」

  2. 按一下 「建立移轉作業」

  3. 在「Create Transfer」(建立轉移作業) 頁面:

    • 在「Source type」(來源類型) 部分,「Source」(來源) 請選取「Google Play」

      移轉作業來源

    • 在「Transfer config name」(轉移設定名稱) 專區,針對「Display name」(顯示名稱) 輸入資料移轉作業的名稱,例如 My Transfer。移轉作業名稱可以是任何能讓您辨識移轉作業的值,方便您日後在必要時進行修改。

      移轉作業名稱

    • 在「Schedule options」(排程選項) 專區:

      • 在「Repeat frequency」(重複執行頻率) 部分,選擇多久執行一次資料移轉作業。如果選取「Days」(天),請按照世界標準時間提供有效的值。
      • 視情況選取「Start now」(立即開始) 或「Start at set time」(在所設時間開始執行),並提供開始日期和執行時間。
    • 在「Destination settings」(目的地設定) 部分,「Destination dataset」(目的地資料集) 請選取您為了儲存資料而建立的資料集。

      移轉資料集

    • 在「Data source details」(資料來源詳細資料) 區段:

      • 在「Cloud Storage bucket」(Cloud Storage bucket) 輸入 Cloud Storage bucket 的 ID。
      • 在「Table suffix」(資料表後置字串) 部分輸入後置字串,例如 MT (即 My Transfer)。

      Google Play 來源詳細資料

    • 在「Service Account」(服務帳戶) 選單,選取與貴組織 Google Cloud 專案相關聯的服務帳戶。您可以將服務帳戶與資料移轉作業建立關聯,這樣就不需要使用者憑證。如要進一步瞭解如何搭配使用服務帳戶與資料移轉作業,請參閱使用服務帳戶的相關說明。

      • 如果使用聯合身分登入,您必須擁有服務帳戶才能建立資料移轉作業。如果是以 Google 帳戶登入,則不一定要透過服務帳戶建立移轉作業。
      • 服務帳戶必須具備必要權限
    • (選用步驟) 在「Notification options」(通知選項) 部分執行下列操作:

      • 按一下啟用電子郵件通知的切換開關。當您啟用此選項時,移轉管理員會在移轉作業失敗時收到電子郵件通知。
      • 在「Select a Pub/Sub topic」(選取 Pub/Sub 主題) 選取主題名稱,或是點選「Create a topic」(建立主題)。這個選項會針對移轉作業設定 Pub/Sub 執行通知
  4. 按一下 [儲存]

bq

輸入 bq mk 指令並提供移轉建立標記 - --transfer_config。還需加上以下旗標:

  • --target_dataset
  • --display_name
  • --params
  • --data_source
bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source
--service_account_name=service_account_name

其中:

  • project_id 是您的專案 ID。如果未指定 --project_id,系統會使用預設專案。
  • dataset 是移轉設定的目標資料集。
  • name 是移轉設定的顯示名稱。資料移轉作業名稱可以是任意值,日後需要修改移轉作業時,能夠據此識別即可。
  • parameters 含有已建立移轉設定的 JSON 格式參數,例如:--params='{"param":"param_value"}'。針對 Google Play,您必須提供 buckettable_suffix 參數。bucket 是包含您 Play 報表檔案的 Cloud Storage 值區。
  • data_source 是資料來源:play
  • service_account_name 是用於驗證資料移轉作業的服務帳戶名稱。服務帳戶應由用於建立轉移作業的相同 project_id 所擁有,且應具備所有必要權限

舉例來說,下列指令會使用 Cloud Storage 值區 pubsite_prod_rev_01234567890987654321 和目標資料集 mydataset,建立名為 My Transfer 的 Google Play 資料移轉作業。資料移轉作業會在預設專案中建立:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"bucket":"pubsite_prod_rev_01234567890987654321","table_suffix":"MT"}' \
--data_source=play

首次執行指令時,您會收到如下的訊息:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

請按照訊息中的操作說明進行,在指令列中貼上驗證碼。

API

請使用 projects.locations.transferConfigs.create 方法,並提供 TransferConfig 資源的執行個體。

Java

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create a play transfer config.
public class CreatePlayTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String bucket = "gs://cloud-sample-data";
    String tableSuffix = "_test";
    Map<String, Value> params = new HashMap<>();
    params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
    params.put("table_suffix", Value.newBuilder().setStringValue(tableSuffix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Play Config Name")
            .setDataSourceId("play")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createPlayTransfer(projectId, transferConfig);
  }

  public static void createPlayTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("play transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("play transfer was not created." + ex.toString());
    }
  }
}

排解 Google Play 轉移設定問題

如果您無法順利設定資料移轉作業,請參閱排解 BigQuery 資料移轉服務移轉設定問題

查詢資料

資料移轉至 BigQuery 時,系統會將資料寫入擷取時間分區資料表。詳情請參閱分區資料表簡介一文。

如果您要直接查詢資料表,而不要使用自動產生的檢視表,您必須在查詢中使用 _PARTITIONTIME 虛擬資料欄。詳情請參閱查詢分區資料表一文。

定價

如要瞭解 Google Play 資料移轉定價,請參閱定價頁面。

資料移轉至 BigQuery 之後,即適用標準的 BigQuery 儲存空間查詢計價方式。

後續步驟