Hasura(cloud)のGraphQLエンジンからBigQueryを繋いで参照してみる

2022.04.15

HasuraではGoogleのBigQueryに接続し、データベーススキーマに基づいてGraphQLAPIを構築していくことが可能になっています。

現状、BigQueryとの接続でサポートされているのはQUERYのみのようです。

やってみる

前提

まずはHasura Cloudでアカウントを作成しておく必要があります。

BigQueryでは

  • gcpのプロジェクトID
  • graphqlで公開できるデータセット
  • プロジェクトを照会するためのサービスアカウント

が必要です。

接続を作成

Hasura Cloudにログインし、Data->Data Manager->Connect Existing Database のページで設定を行なっていきます。

  • Database Display Name
    • 接続の名前を入力
  • Data Source Driver
    • 接続するデータベースの種類を選択します。
    • 今回であればBigQuery(beta) にします
  • Connect Database Via
    • データベースに接続するための情報を入力します。
    • BigQueryでの接続にはサービスアカウントが必要になってきます
      • JSON形式のキーをGCPからダウンロードできます
      • Connection Parametersにサービスアカウントキーの中身を直接入力するか、Environment VariableでHasuraのプロジェクトに設定できる環境変数を指定できます
        • 環境変数:
  • Project Id
    • GCPのプロジェクトIDを入力します
  • Datasets
    • Hasuraと連携するBigQueryのデータセットを入力します。カンマ区切りで複数のデータセットを指定できます
  • Global Select Limit
    • 返される最大行数を指定します(default 1000)

入力後、Connect Databaseボタンを押して作成します

テーブルの追跡を設定

データセットとの接続が完了後、作成した接続の詳細ページに遷移します。

Untracked tables or viewsの箇所にテーブル一覧が表示されます

Trackを押すことでGraphQL APIで公開できるようになります。

公開すると、コンソール上からもデータを参照できるようになります。

HasuraのGraphQLエンジンはBiggQueryのテーブル/ビューに基づいてGraphQLスキーマとリゾルバーを自動的に生成します。 GraphQLスキーマやリゾルバーを作成する必要はありません。

別のテーブルとのリレーションシップの作成も可能です。

GraphQLクエリを実行してみる

コンソールのAPI->GraphiQLのページで実行してみます。

公開したテーブルに対してクエリを実行することができるようになりました。

リレーションシップ構築後のクエリも無事に実行可能です。

GraphQLクエリを実行したときに、BigQuery側でどのようなクエリが実行されたのかをCloud Loggingで参照することができるので、実際に見てみると良いと思います。