クエリ履歴の監査を表示する

クエリ履歴の監査を使用すると、Ads Data Hub アカウントを使用して実行されたすべてのジョブのレポートを生成できます。これにより、誰がいつデータにアクセスしたのかという点について確認できます。

クエリ履歴の監査は、Ads Data Hub アカウントを使用して実行されたすべてのクエリのログエントリを含む BigQuery テーブルとして作成されます。アカウントのクエリ履歴の監査を表示するには、まず API を使用してレポートを生成する必要があります。各監査ログには、1 日分のデータが含まれます。過去 30 日以内の任意の日の監査ログを生成できます。

クエリ履歴の監査はスーパーユーザーのみ利用できます。ロールベースのアクセスの詳細

クエリ履歴の監査の形式

各クエリ履歴の監査では、次のスキーマを使用します。

フィールド名 説明
customer_id Ads Data Hub のお客様 ID
ads_customer_id 使用する場合はサブアカウントの ID(使用しない場合は customer_id と同じ)
match_table_customer_id 使用する場合はマッチテーブルを含むアカウントの ID(使用しない場合は customer_id と同じ)
user_email クエリを実行したユーザーのメールアドレス
query_start_time クエリの実行が開始された時刻
query_end_time クエリの実行が終了した時刻
query_type 分析クエリとオーディエンス クエリを区別します
query_resource_id クエリに関連付けられている ID
query_text クエリの SQL
query_parameters
query_parameters.name クエリのパラメータの名前
query_parameters.value クエリのパラメータ row_merge_summary を介して渡された値
row_merge_summary.column_name 列の名前
row_merge_summary.merge_type 行のマージの概要のタイプ
row_merge_summary.constant_value 定数セットの値(定数が使用されていない場合は null になります)
destination_table クエリが書き込まれた場所(BigQuery 内)

クエリ履歴の監査へのアクセス

クエリ履歴の監査にアクセスするには、API を呼び出す必要があります。API を呼び出すためのサンプルコードは以下のとおりです。または、リファレンス ドキュメントを参照して、独自のクエリを作成してください。

API リクエストの結果は、API リクエストの本文で指定した BigQuery データセットに書き込まれます。


"""This sample shows how to create a query history audit.

For the program to execute successfully, ensure that you run it using Python 3.
"""

from __future__ import print_function
from json import dumps
from google_auth_oauthlib import flow
from googleapiclient.discovery import build

appflow = flow.InstalledAppFlow.from_client_secrets_file(
  # Replace client_secrets.json with your own client secret file.
  'client_secrets.json',
  scopes=['https://www.googleapis.com/auth/adsdatahub'])
appflow.run_local_server()
credentials = appflow.credentials
developer_key = input('Developer key: ').strip()
service = build('adsdatahub', 'v1', credentials=credentials,
                developerKey=developer_key)

def pprint(x):
  print(dumps(x, sort_keys=True, indent=4))

customer_id = input('Customer ID (e.g. "customers/123"): ').strip()
bq_project = input('Destination BigQuery project ID (e.g. "your-project"): ').strip()
dataset_id = input('Destination BigQuery dataset (e.g. "your-dataset"): ').strip()
start = input('The start date for your query history audit. Formatted as "mm/dd/yyyy": ').strip().split('/')
end = input('The end date for your query history audit. Should be 1 day later than start_date. Formatted as "mm/dd/yyyy": ').strip().split('/')

choice = input("Do you want to enter a timezone? Defaults to UTC otherwise. (y/n) ")

if choice.lower() == 'y':
  timezone = input("Timezone (e.g. 'UTC'): ")
else:
  timezone = 'UTC'

body = {
  'project_id': bq_project,
  'dataset': dataset_id,
  'start_date': {
      'year': start[2],
      'day': start[1],
      'month': start[0]
  },
  'end_date': {
      'year': end[2],
      'day': end[1],
      'month': end[0]
  },
  'time_zone': timezone
}

pprint(service.customers().exportJobHistory(customer=customer_id, body=body).execute())