【小ネタ】AccessからRedshiftに接続した時に正しく表示されなかった時の解決方法

2017.10.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DI部のおおたきです。
Microsoft Access2013からRedshitに接続するというレアなケースがあり、その際うまく表示されない現象がありました。
今回その時の解決方法というには大げさですが、対応した方法についての内容です。
AccessからRedshiftのテーブルを参照するにはRedhisftのODBCドライバをWindowsにインストールします。 ダウンロード先はこちらに記載があります。

※今回使用したRedshiftのODBCのバージョンは「1.3.6.1000」です。 ODBCのデータソースの作成方法についてはここでは省略します。

Redshiftにテーブルを用意します。今回はコード、部署、名前を登録できるsampleテーブルを作成しました。データはこんな感じで登録されています。またカラムの型は全てVARCHARになっており、codeカラムが一意になるイメージです。

code dept name
A0001 事業部 田中
A0002 事業部 鈴木
A0003 事業部 高橋


Accessから接続してみます。
メニューの外部データタブ➡︎ODBCデータベースを選択します。
「リンクテーブルを作成してソースデータにリンクする」を選択してOKボタンをクリックします。
table_link

事前に作成したデータソースを選択します。

datasource-select
テーブル一覧が表示されるので、対象のテーブルを選択すると、「固有レコード識別子の選択」画面が表示されます。
今回はcodeカラムが主キーの想定になるのでcodeを選択します。
作成したリンクテーブルを選択してデータを表示させてみます。#Deletedと表示されてしまい、データが正しく表示されません。 sample_table1
調査してみると他のDBでも同様の現象は発生していることが分かりました。主キーになるカラムが数値型にすると解決するという記載がありましたので、実際にcodeカラムをintに変えて別テーブルを作成し数値データにしたところ表示されました。しかし、既に存在するテーブルに対してカラムの変更は難しいのでこの方法は使用できません。
Postgresqlでは正しく動作できているようなので、PostgresqlのODBCドライバで試してみました。
Postgresql用のドライバこちらからダウンロードできます。
※今回使用したPostgesqlのODBCのバージョンは「9.6.500」です。

インストール後にODBCのデータソース新規作成画面でドライバを確認すると「PostgreSQL ANSI」と「PostgeSQL Unicode」があるので「PostgeSQL Unicode」を選択し、接続情報を設定します。
postgresql-odbc
先ほどと同じようにAccessのリンクテーブルを使って表示してみます。
sample_table2
無事データが正しく表示されました。

まとめ

RedshiftのドライバからPostgresqlのドライバに切り替えることで無事表示ができました。
現状、AccessからRedshiftに接続する場合はPostgtesqlのドライバを使った方が良さそうです。
今回は以上です。