my opinion is my own

Redshift SpectrumからGlue Data Catalogのテーブルを参照する

Athena側で作ったGlue Data Catalog側のデータベース名、テーブル名の前提は下記記事。

AthenaでParquetファイルのデータカタログ作成 | my opinion is my own

Redshift側で外部スキーマを定義

データカタログ側にデータベース、テーブルがある状態であれば外部スキーマ定義を行うだけで良い。S3やGlueの権限をiam_roleとしてRedshiftにアタッチしておく必要がある。

drop schema external_schema;
create external schema external_schema from data catalog
database 'catalogtest'
iam_role 'arn:aws:iam::xxxxxxx:role/myRedshiftRole'
create external database if not exists;
mydb=# create external schema external_schema from data catalog
mydb-# database 'catalogtest'
mydb-# iam_role 'arn:aws:iam::xxxxxxx:role/myRedshiftRole'
mydb-# create external database if not exists;
INFO:  External database "catalogtest" already exists
CREATE SCHEMA

スキーマの確認

mydb=# select schemaname, databasename from svv_external_schemas where schemaname='external_schema';
   schemaname    | databasename 
-----------------+--------------
 external_schema | catalogtest
(1 row)
mydb=# select schemaname, tablename, location from SVV_EXTERNAL_TABLES where schemaname='external_schema';
   schemaname    | tablename |      location      
-----------------+-----------+--------------------
 external_schema | testdata  | s3://202110test/pq
(1 row)

mydb=# select * from SVV_EXTERNAL_COLUMNS where tablename = 'testdata';
   schemaname    | tablename | columnname | external_type | columnnum | part_key | is_nullable 
-----------------+-----------+------------+---------------+-----------+----------+-------------
 external_schema | testdata  | id         | string        |         1 |        0 | 
 external_schema | testdata  | name       | string        |         2 |        0 | 
 external_schema | testdata  | comment    | string        |         3 |        0 | 
(3 rows)

クエリを行う

mydb=# select name,comment from external_schema.testdata;
 name  |       comment        
-------+----------------------
 test1 | ゎぶばあちあぬナクバ
 test2 | がマうひバぴじクハぺ
 test3 | スみでてゥあッあけげ
(3 rows)
---

関連しているかもしれない記事


#AWS #Redshift