1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SASプログラムをDatabricksに移行する際の注意点 - データ移行編

Posted at

最近、SASからDatabricksへ移行する案件をいくつかこなしているが、移行に関する情報は非常に少ない。おそらく両方使える人材が少ないこと、難易度が高いなどの理由があると思われる。

そこでSASからDatabricksに移行する際の注意点をまとめてみる。SAS→Databricks移行のためには大きく分けてデータ移行とプログラム移行の2つある(気が向いたら管理周りについても書きます)。今回はデータ移行について書く。

前提

そもそもSASからDatabricksの移行とは、「SAS v9がインストールされたSASサーバーで管理されたデータセットおよびETLプログラムなどのアセットをDatabricksに移行する」ことを指す場合がほとんどだろう。本記事もその前提に立つが、SAS v9の製品群は非常に複雑なので、スコープをSAS言語で書かれたプログラム、Enterprise Guide(以下EG)で作られたプロセス(データフロー)とSASデータセットを移行対象とすることを前提とする。あとSAS Data Integrationは単純に使ったことが無いので対象外。

またユーザー管理やセキュリティも移行・もしくは再設定が必要だが、それについては言及しない。ただしデータ管理についての考慮事項は記載する。
現在のSASはSAS Viya環境も存在しているが、SAS ViyaからDatabricks移行については本記事の対象外とする。代わりに後日SAS ViyaとDatabricksの比較記事でも書く(多分ニーズはない)。

データセットの移行

SASデータセットはライブラリ→データセットという階層で管理される。これはDatabricksでいうところのスキーマ→テーブルという階層に近い。階層構造はそのまま継承してしまって良いだろう。

問題はデータセット。SASデータセットはデータ型が数値か文字しかない、ガバガバな構造になっている。数値型に整数型、ブール(0,1のフラグ変数)、小数点型、さらには日付も含まれる。なので、データ移行の際には各テーブルの変数をどの変数型で定義するか、マッピングする必要がある。

厄介な文字変数のブランク

SASの文字変数はNULLが存在せず、欠損値は全て長さゼロのブランクとなる。安直に考えるとこのブランクは全てNULLにしてしまえば良いのだが、ここに落とし穴が潜む。SASではこのブランク値はNULLではないので、ブランク同士の結合ができてしまう他、文字列操作の関数の結果もNULLではなく普通に結果が返ってくる。
また、SASではWHERE var1 IS NULL とWHERE var1 =''は同義なので、抽出結果は同じになるが、Databricksでは両者で結果が異なってくるので、ブランクをNULLに置換して移行する際はプログラムも精査が必要となる。

フォーマット・ラベル

SASデータセットに設定されている変数ラベルやフォーマットは、Databricksに対応する機能は存在しない。ラベルについては必要に応じてコメントで対応する。フォーマットは残念ながら諦めるしかない。

実際の移行

移行を実施する際にはまずクラウドストレージにSASデータセットをアップロードし、Databricksからクラウドストレージ上のSASデータセットを読みにいく方法がシンプル。
SASデータセットを読み込む際はspark-sas7bdatを使用することをお勧めする。pandas.read_sasはSASデータセットの読み込みが非常に遅いので、移行にかなり時間を取られる可能性がある。なおspark-sas7bdatはクラスターにインストールが必要なライブラリなので、事前にシステム管理者との調整が必要な点に注意。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?