データセットをカスタムSQL使用し作成する方法

@daijimtd
ご質問ありがとうございます。

エラー画面の sourceErrorMessage には、次のメッセージが出ています。

ERROR: Current user is not authenticated with IAM credentials.

このメッセージは「接続しているユーザーがIAM認証されていない」という意味です。そのため、SQLの書き方よりも、データソース(Amazon Redshift)への接続時の認証方式が原因である可能性が高いと考えられます。

考えられる原因

andes.jp_ats_roc.* のテーブルは、Redshift上ではAWS Lake Formation経由の共有データ(データ共有)として参照されているものと思われます。

Redshiftのドキュメントによると、Lake Formationで共有されたデータには、RedshiftとLake Formationの両方へのアクセス権があるユーザーしかアクセスできません。CREATE USER で作成したデータベースユーザーではアクセスできないと記載されています。つまり、データベースのユーザー名とパスワードで接続しているデータソースからこれらのテーブルを読むと、今回のようなエラーになる可能性があります。

なお、Hubbleで同じSQLが動くのは、Hubble側の接続方法(認証方式)が異なるためだと推測されます。ただし、Hubbleの内部の仕組みについて公式に確認したものではありません。

ご確認いただきたいこと

1. データソースの認証方式

Amazon QuickからRedshiftへの接続には、次の3つの認証方式があります。

  • 信頼できるIDの伝達(Trusted Identity Propagation)
  • IAMロールとして実行(Run-as IAM role)
  • Redshiftデータベース認証情報(ユーザー名/パスワード)

データセット作成に使っているデータソースが「ユーザー名/パスワード」方式になっていないか、ご確認ください。その場合は、IAMベースの認証方式でデータソースを作成すると解消する可能性があります。必要な権限や設定手順は、下記の参考情報のドキュメントをご参照ください。

2. 共有データへのアクセス権限

  • 接続先のクラスターまたはワークグループで、上記2つのテーブルを含むデータ共有が有効になっているかご確認ください。
  • あわせて、接続に使うIAMユーザーまたはIAMロールに、そのデータベースへのアクセス権限が付与されているかもご確認ください。

3. 切り分けのための確認

SQL内の DATEADD や DATE_TRUNC はRedshiftでサポートされている関数です。そのため、現時点でSQLを書き換える必要はないと考えられます。

まずは次のような単純なクエリをお試しください。同じエラーが出る場合は、SQLではなく接続・認証の設定が原因だと判断できます。

SELECT * FROM andes.jp_ats_roc.daily_inbound_adhoc_adjustment_result LIMIT 10;

上記で解決しない場合は、次の3点を共有いただけますと、さらに詳しく確認できます。

  • データソースの種類(Redshift ProvisionedかServerlessか)
  • 現在の認証方式
  • 単純なクエリでの結果

参考情報