環境構築はいつも面倒だ#08: RODBCのTeradata接続
RでTeradataに接続して利用するライブラリとしてRODBCがあります。期待することはSQLでデータを扱うことができて、取得した結果をデータフレームで扱うことができて、作成したデータフレームをデータベース側にバルク(一括)ロードできることです。以下に試してみました。
Teradata ODBC Driver
RODBCはローカルのODBC Driverを利用します。そのため、まずはODBC Driverをダウンロードして設定を行います。ダウンロードは以下のサイトから。会員登録が必要です。手元の環境はWindows10のため、Windowsの64bitを選択します。記載時のファイルはTeradataStudio__win64_x86.17.20.00.04.zipでした
ダウンロードを終えたら解凍し、中にあるsetup.exeを実行します。あとは道なりでインストールは完了します。続いてセットアップですが、Win+sからodbcと打ち込み、[ODBCデータソース(64ビット)]を選択、そして以下の通り進みます:
ユーザーDSN > 追加 > Teradata Database ODBC Driver 17.20
中の設定は以下の通り。記載のないそのほかの項目はブランクのままで:
Data Source Name: お好きなものを、ここで記載した名前が後述するdsnで指定されます
Teradata Server Info, Name: 192.168.999.999 接続先Teradata環境のIPアドレスを
Username: ご自身のユーザー名を
Default Database: ご自身のデフォルトデータベースを
Session Character Set: UTF-8
RODBC
以下のノートブックの通りです
お読みいただければわかるかとは思うのですが、いくつかポイントを記載しておきます:
接続設定におけるdsnには上述したODBC DriverのData Source Nameを指定します
Select文の結果を変数に投入しておけば、それはすでにデータフレームなので、あとはRの世界で扱うことができます
sqlQuery()の関数において、SQLの中身は好きに書いていいのですが、ダッシュはエスケープ文字(円マーク)が必要です
sqlSave()では、create insertもできますし、insertだけもできます。そしてデータフレームをバルクで挿入できます。ただデータフレームが持つ行番号もロードの対象となりうるのでオプション選択を考慮しましょう
ちなみにPythonで同じようなこと(SQLでPythonから読み書き、バルク挿入)をする場合はライブラリsqlchemy + teradatasqlalchemyが利用可能です。本題ではないですが以下にて使っているのでご参考までに
以上です
///