https://community.denodo.com/kb/en/view/document/Integrating%20Google%20BigQuery%20with%20Denodo?category=Data%20Sources
https://www.isoroot.jp/blog/1651/
https://dev.classmethod.jp/articles/service-account-bigquery-roles/
前提:
Denodo Express インストール、起動済み
-------- BigQuery側作業
-- 1. 前作業
gcloud init
gcloud auth list
gcloud --version
gcloud projects create project01-9999999 \
--name="project01"
gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet
gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111
gcloud services enable compute.googleapis.com --project project01-9999999
gcloud components update
-- 2. BigQuery API有効化
gcloud services list --enabled
gcloud services enable bigquery.googleapis.com \
--project project01-9999999
-- 3. BigQueryデータセットを作成する
bq mk ds01
bq ls
-- 4. テスト用テーブル、データの作成(コンソールから実行)
drop table ds01.tab1;
create table ds01.tab1
(
col1 INT NOT NULL
, col2 NUMERIC NOT NULL
, col3 DATETIME NOT NULL
, col4 TIMESTAMP
, col5 STRING
, col6 BYTES
);
insert into ds01.tab1 values(1,2,current_datetime(),current_timestamp(),'a',b'a' );
select * from ds01.tab1;
select * from ds01.INFORMATION_SCHEMA.TABLES;
※INFORMATION_SCHEMA.TABLESは大文字で指定が必要
-- 5. サービスアカウントの作成
gcloud iam service-accounts create sa99999999 \
--description="sa99999999" \
--display-name="sa99999999"
gcloud iam service-accounts list
gcloud projects add-iam-policy-binding project01-9999999 \
--member="serviceAccount:sa99999999@project01-9999999.iam.gserviceaccount.com" \
--role="roles/bigquery.admin"
gcloud projects get-iam-policy project01-9999999
gcloud iam service-accounts keys create ~/key01.json \
--iam-account=sa99999999@project01-9999999.iam.gserviceaccount.com
cat ~/key01.json
gcloud iam service-accounts keys list \
--iam-account=sa99999999@project01-9999999.iam.gserviceaccount.com
key01.jsonをDenodo Express端末のCドライブ直下へコピー
-------- Denodo側作業
-- 6. BigQuery用JDBCドライバーのインポート
Design Studio で 'File -> Extension management'
Librariesタブを選択
下記URLからダウンロードした「SimbaBigQueryJDBC42-1.3.2.1003.zip」の全jarファイルをImport
https://cloud.google.com/bigquery/providers/simba-drivers
Resource type: jdbc
Version: bigquery
-- 7. データベース作成
DROP DATABASE db01 cascade;
CREATE OR REPLACE DATABASE db01 'description of db01'
VCS OFF
CHARSET UNICODE
AUTHENTICATION LOCAL
ODBC AUTHENTICATION NORMAL
CHECK_VIEW_RESTRICTIONS ALWAYS
;
-- 8. フォルダ作成
CONNECT DATABASE db01;
CREATE FOLDER '/01ds' DESCRIPTION 'description of folder01';
CREATE FOLDER '/02bv' DESCRIPTION 'description of folder02';
CREATE FOLDER '/03iv' DESCRIPTION 'description of folder03';
-- 9. データソース作成
Name -> ds01
Database adapter -> Google BigQuery
Database URL -> jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=project01-9999999;OAuthType=0;OAuthServiceAcctEmail=sa99999999@project01-9999999.iam.gserviceaccount.com;OAuthPvtKeyPath=c:\key01.json;Timeout=45
Transaction isolation -> Database Default
Authentication -> Service-based OAuth Authentication
Project name -> project01-9999999
Account email -> sa99999999@project01-9999999.iam.gserviceaccount.com
Private key -> 「c:\key01.json」を選択
CREATE DATASOURCE JDBC ds01
FOLDER = '/01ds'
DRIVERCLASSNAME = 'com.simba.googlebigquery.jdbc.Driver'
DATABASEURI = 'jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=project01-9999999;OAuthType=0;OAuthServiceAcctEmail=sa99999999@project01-9999999.iam.gserviceaccount.com;OAuthPvtKeyPath=c:\key01.json;Timeout=45'
GCP (
OAUTH_TYPE = '0'
PRIVATE_KEY = 'xxxxx' ENCRYPTED
PROJECT_ID = 'project01-9999999'
SERVICE_ACCOUNT_EMAIL = 'sa99999999@project01-9999999.iam.gserviceaccount.com'
)
CLASSPATH = 'bigquery'
DATABASENAME = 'bigquery'
DATABASEVERSION = '2_0'
FETCHSIZE = 1000
VALIDATIONQUERY = 'Select 1'
INITIALSIZE = 4
MAXIDLE = -1
MINIDLE = 0
MAXACTIVE = 20
EXHAUSTEDACTION = 1
TESTONBORROW = true
TESTONRETURN = false
TESTWHILEIDLE = false
TIMEBETWEENEVICTION = -1
NUMTESTPEREVICTION = 3
MINEVICTABLETIME = 1800000
POOLPREPAREDSTATEMENTS = false
MAXOPENPREPAREDSTATEMENTS = -1
DATA_LOAD_CONFIGURATION (
BATCHINSERTSIZE = 200
);
-- 10. ラッパー作成
CREATE WRAPPER JDBC b_tab1
FOLDER = '/02bv'
DATASOURCENAME=ds01
SCHEMANAME='ds01'
RELATIONNAME='tab1'
OUTPUTSCHEMA (
col1 = 'col1' :'java.lang.Long' (OPT) (sourcetypedecimals='0', sourcetyperadix='10', sourcetypesize='19', sourcetypeid='-5', sourcetypename='INT64') NOT NULL SORTABLE,
col2 = 'col2' :'java.math.BigDecimal' (OPT) (sourcetypedecimals='9', sourcetyperadix='10', sourcetypesize='38', sourcetypeid='2', sourcetypename='NUMERIC') NOT NULL SORTABLE,
col3 = 'col3' :'java.time.LocalDateTime' (OPT) (sourcetypedecimals='6', sourcetypesize='26', sourcetypeid='93', sourcetypename='DATETIME') NOT NULL SORTABLE,
col4 = 'col4' :'java.time.OffsetDateTime' (OPT) (sourcetypedecimals='6', sourcetypesize='26', sourcetypeid='93', sourcetypename='TIMESTAMP') NOT NULL SORTABLE,
col5 = 'col5' :'java.lang.String' (OPT) (sourcetypesize='65535', sourcetypeid='12', sourcetypename='STRING') NOT NULL SORTABLE,
col6 = 'col6' :'java.sql.Blob' (OPT) (sourcetypesize='65535', sourcetypeid='-3', sourcetypename='BYTES') NOT NULL NOT SORTABLE
);
-- 11. 基本ビュー作成
CREATE TABLE b_tab1 I18N jp (
col1:long (notnull, sourcetypeid = '-5', sourcetyperadix = '10', sourcetypedecimals = '0', sourcetypesize = '19'),
col2:decimal (notnull, sourcetypeid = '2', sourcetyperadix = '10', sourcetypedecimals = '9', sourcetypesize = '38'),
col3:timestamp (notnull, sourcetypeid = '93', sourcetypedecimals = '6', sourcetypesize = '26'),
col4:timestamptz (notnull, sourcetypeid = '93', sourcetypedecimals = '6', sourcetypesize = '26'),
col5:text (notnull, sourcetypeid = '12', sourcetypesize = '65535'),
col6:blob (notnull, sourcetypeid = '-3', sourcetypesize = '65535')
)
FOLDER = '/02bv'
CACHE OFF
TIMETOLIVEINCACHE DEFAULT
ADD SEARCHMETHOD b_tab1(
I18N jp
CONSTRAINTS (
ADD col1 (any) OPT ANY
ADD col2 (any) OPT ANY
ADD col3 (any) OPT ANY
ADD col4 (any) OPT ANY
ADD col5 (any) OPT ANY
ADD col6 NOS ZERO ()
)
OUTPUTLIST (col1, col2, col3, col4, col5, col6
)
WRAPPER (jdbc b_tab1)
);
-- 12. インターフェイスビュー作成
CREATE INTERFACE VIEW i_tab1 (
col1:long (sourcetypedecimals = '0', sourcetyperadix = '10', sourcetypesize = '19', sourcetypeid = '-5'),
col2:decimal (sourcetypedecimals = '9', sourcetyperadix = '10', sourcetypesize = '38', sourcetypeid = '2'),
col3:timestamp (sourcetypedecimals = '6', sourcetypesize = '26', sourcetypeid = '93'),
col4:timestamptz (sourcetypedecimals = '6', sourcetypesize = '26', sourcetypeid = '93'),
col5:text (sourcetypesize = '65535', sourcetypeid = '12'),
col6:blob (sourcetypesize = '65535', sourcetypeid = '-3', contenttype = 'autodetect')
)
SET IMPLEMENTATION b_tab1
FOLDER = '/03iv';
-- 13. 動作確認
SELECT * FROM db01.b_tab1 CONTEXT('cache_wait_for_load' = 'true') TRACE;
SELECT * FROM db01.i_tab1 CONTEXT('cache_wait_for_load' = 'true') TRACE;
-------- BigQuery側作業
-- 14. クリーンアップ
gcloud projects list
gcloud projects delete project01-9999999 \
--quiet