Data Catalog での検索方法

このドキュメントでは、Data Catalog を使用して、Google Cloud プロジェクトのデータセット、テーブル、ビュー、Cloud Pub/Sub トピックなどのデータアセットを検索する方法について説明します。

検索範囲

権限によってユーザーが異なることがあります。Data Catalog の検索結果は、ユーザーの IAM のロールと権限に従って処理されます。ユーザーが BigQuery メタデータの読み取りアクセス権を持っている場合、そのオブジェクトが Data Catalog の検索結果に表示されます。

たとえば、テーブルを検索するには、そのテーブルに対する bigquery.tables.get 権限が必要です。データセットを検索するには、そのデータセットに対する bigquery.datasets.get 権限が必要です。BigQuery メタデータ閲覧者のロール(roles/bigquery.metadataViewer)には、検索結果に表示されるデータセット、テーブル、ビューに対する必要最低限の読み取り権限が含まれています。

日付別テーブル

Data Catalog は、日付別テーブルを単一の論理エントリに集計します。このエントリには、最新の日付のテーブル シャードと同じスキーマが含まれ、シャードの合計数に関する集計情報が含まれます。このエントリは、自身が属するデータセットのアクセスレベルを継承します。論理エントリを含むデータセットへのアクセス権をユーザーが持っている場合、Data Catalog の検索には、これらの論理エントリのみが表示されます。個々の日付共有テーブルは Data Catalog の検索に表示されません。これは、Data Catalog に日付共有テーブルが存在していて、タグ付けできる場合でも変わりません。

データアセットを検索する方法

Console

  1. Google Cloud Console の Data Catalog のホームページからデータアセットの検索を実行できます。また、[データアセット] や [検索のヒント] パネルから選択して、検索結果をフィルタリングすることもできます。

  2. [検索] をクリックするか、Data Catalog ホームページの [データアセット] や [検索のヒント] パネルから選択すると、[検索] ページが開きます。ホームページの [データアセット] または [検索のヒント] で選択した項目は、[タイプ] パネルや検索ボックスの式に引き継がれ、検索条件として使用されます。

  3. 特定のデータアセット タイプでフィルタリングするには、検索バーの下にある [データ型] ボックスをクリックし、検索するタイプを選択します。

    例: タクシー旅行の公開データセットを一覧表示するには、データセット タイプを選択し、検索ボックスに「trips」と入力して [検索] をクリックします。[公開データセットを含める] がオンになっていることを確認し、結果を表示します。

  4. 検索ボックスの検索キーワードに keyword:value を追加すると、検索条件を絞り込むことができます。

    キーワード説明
    name: データアセット名に一致する
    column: 列名またはネストされた列名を照合する
    description: テーブルの説明に一致する

  5. 検索キーワードに次のいずれかのタグ プレフィックスを追加すると、タグ検索を実行できます。

    タグ説明
    tag:project-name.tag_template_name タグ名に一致する
    tag:project-name.tag_template_name.key タグキーに一致する
    tag:project-name.tag_template_name.key:value key:string value タグのペアに一致

Python

"""This application demonstrates how to perform search operations with the
Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
"""

import argparse

def search(organization_id, search_string):
    """Searches Data Catalog entries for a given organization."""
    from google.cloud import datacatalog_v1

    datacatalog = datacatalog_v1.DataCatalogClient()

    scope = datacatalog_v1.types.SearchCatalogRequest.Scope()
    scope.include_org_ids.append(organization_id)

    # Alternatively, search using project scopes.
    # scope.include_project_ids.append("my_project_id")

    return datacatalog.search_catalog(
        scope=scope,
        query=search_string)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )

    parser.add_argument('organization_id',
                        help='Your Google Cloud organization ID')
    parser.add_argument('query', help='Your custom query')

    args = parser.parse_args()

    search_results = None

    if args.query:
        search_results = search(args.organization_id, args.query)
    else:
        raise Exception('Please provide valid search input.')

    for result in search_results:
        print(result)

Java

/*
This application demonstrates how to perform search operations with the
Cloud Data Catalog API.

For more information, see the README.md under /datacatalog and the
documentation at https://cloud.google.com/data-catalog/docs.
*/

package com.example.datacatalog;

import com.google.cloud.datacatalog.v1.SearchCatalogRequest;
import com.google.cloud.datacatalog.v1.SearchCatalogRequest.Scope;
import com.google.cloud.datacatalog.v1.SearchCatalogResult;
import com.google.cloud.datacatalog.v1.DataCatalogClient;
import com.google.cloud.datacatalog.v1.DataCatalogClient.SearchCatalogPagedResponse;

public class SearchCatalog {

  public static void searchCatalog() {
    // TODO(developer): Replace these variables before running the sample.
    String orgId = "111111000000";
    String query = "type=dataset";
    searchCatalog(orgId, query);
  }

  /**
   * Search Data Catalog entries for a given organization.
   *
   * @param orgId The organization ID to which the search will be scoped, e.g. '111111000000'.
   * @param query The query, e.g. 'type:dataset'.
   */
  public static void searchCatalog(String orgId, String query) {
    // Create a scope object setting search boundaries to the given organization.
    Scope scope = Scope.newBuilder().addIncludeOrgIds(orgId).build();

    // Alternatively, search using project scopes.
    // Scope scope = Scope.newBuilder().addAllIncludeProjectIds("my-project").build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DataCatalogClient dataCatalogClient = DataCatalogClient.create()) {

      // Search the catalog.
      SearchCatalogRequest searchCatalogRequest =
          SearchCatalogRequest.newBuilder().setScope(scope).setQuery(query).build();
      SearchCatalogPagedResponse response = dataCatalogClient.searchCatalog(searchCatalogRequest);

      System.out.println("Search results:");
      for (SearchCatalogResult result : response.iterateAll()) {
        System.out.println(result);
      }

    } catch (Exception e) {
      System.out.print("Error during SearchCatalog:\n" + e.toString());
    }
  }
}

Node.js

// This application demonstrates how to perform search operations with the
// Cloud Data Catalog API.

async function search() {

  // -------------------------------
  // Import required modules.
  // -------------------------------
  const { DataCatalogClient } = require('@google-cloud/datacatalog').v1;
  const datacatalog = new DataCatalogClient();

  // -------------------------------
  // Set your Google Cloud Organization ID.
  // -------------------------------
  // TODO: Replace your organization ID in the next line.
  const organizationId = 111111000000;

  // -------------------------------
  // Set your custom query.
  // -------------------------------
  // TODO: If applicable, edit the query string in the next line.
  const query = 'type=dataset'

  // Create request.
  const scope = {
    includeOrgIds: [organizationId],
    // Alternatively, search using project scopes.
    // includeProjectIds: ['my-project'],
  };

  const request = {
    scope: scope,
    query: query,
  };

  const [result] = await datacatalog.searchCatalog(request);
  return result;
}

search().then(response => { console.log(response) });

REST とコマンドライン

ご使用の言語の Cloud クライアント ライブラリにアクセスしない場合、または REST リクエストを使用して API をテストする場合は、次の例を参照して、Data Catalog REST API のドキュメントをご覧ください。

1. カタログを検索。

後述のリクエストのデータを使用する前に、次のように置き換えます。

HTTP メソッドと URL:

POST https://datacatalog.googleapis.com/v1/catalog:search

JSON 本文のリクエスト:

{
  "query":"trips",
  "scope":{
    "includeOrgIds":[
      "organization-id"
    ]
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "results":[
    {
      "searchResultType":"ENTRY",
      "searchResultSubtype":"entry.table",
"relativeResourceName":"projects/project-id/locations/US/entryGroups/@bigquery/entries/entry1-id",
      "linkedResource":"//bigquery.googleapis.com/projects/project-id/datasets/demo_dataset/tables/taxi_trips"
    },
    {
      "searchResultType":"ENTRY",
      "searchResultSubtype":"entry.table",
      "relativeResourceName":"projects/project-id/locations/US/entryGroups/@bigquery/entries/entry2-id",
      "linkedResource":"//bigquery.googleapis.com/projects/project-id/datasets/demo_dataset/tables/tlc_yellow_trips_2018"
    }
  ]
}