見出し画像

環境構築はいつも面倒だ#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が利用可能です。本題ではないですが以下にて使っているのでご参考までに

以上です

#r #rodbc #teradata #sql

///

いいなと思ったら応援しよう!