Redshift で多段でデータシェアリングした Late Binding View にアクセスすると "ERROR: Remote object depends on external shared object." が発生する
3クラスターでの多段データシェアリングした場合 "ERROR: Remote object depends on external shared object"
- 以下の依存関係のテーブルを作成する。
ads クラスターの表 "ads_tbl"-(Datasharing)-> central クラスターのLBV "cnt_lbv"-(Datasharing)-> commerceクラスターのLBV "cmr_lbv"
$ psql -h redshift-cluster-poc-commerce.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser select * dev.public.cmr_lbv_from_cnt; ERROR: Remote object depends on external shared object.
準備作業
- ads クラスターにテーブルを作成する
$ psql -h redshift-cluster-poc-ads.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create table dev.public.ads_tbl (id int); insert into dev.public.ads_tbl values (1),(2),(3); select * from dev.public.ads_tbl; id ---- 1 2 3 (3 rows)
- central クラスターに LBV を作成する
$ psql -h redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create or replace view dev.public.cnt_lbv_from_ads as select * from ads_datashare_db.public.ads_tbl WITH NO SCHEMA BINDING;
- commerce クラスターに LBV を作成する
$ psql -h redshift-cluster-poc-commerce.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create or replace view dev.public.cmr_lbv_from_cnt as select * from cnt_datashare_db.public.cnt_lbv_from_ads WITH NO SCHEMA BINDING;
2クラスターでの循環データシェアリングした場合 ""ERROR: cross-database reference to xx found while analyzing an LBV on producer."
- 以下の依存関係のテーブルを作成する。
central クラスターの表 "cnt_tbl"-(Datasharing)-> commerceクラスターのLBV "cmr_lbv"-(Datasharing)-> centralクラスターのLBV "cnt_lbv"
$ psql -h redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser select * dev.public.cnt_lbv; ERROR: Remote object depends on external shared object.
準備
- central クラスターにテーブルを作成する
$ psql -h redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create table dev.public.cnt_tbl (id int); insert into dev.public.cnt_tbl values (1),(2),(3); select * from dev.public.cnt_tbl; id ---- 1 2 3 (3 rows)
- commerce クラスターに LBV を作成する
$ psql -h redshift-cluster-poc-commerce.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create view dev.public.cmr_lbv as select * from cnt_datashare_db.public.cnt_tbl WITH NO SCHEMA BINDING;
- central クラスターに LBV を作成する
$ psql -h redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com -p 5439 -d dev -U awsuser create view dev.public.cnt_lbv as select * from cmr_datashare_db.public.cmr_lbv WITH NO SCHEMA BINDING;
原因
- Redshift で多段のデータシェアリングを行っているため。