CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Salesforce Einstein Driver の基本。データセットの操作方法を中心に紹介

f:id:sugimomoto:20190301120103p:plain

こんにちは。Dynamics 365 MVP にも関わらず、Salesforce を触る機会がどんどん増えている CData Software Japan リードエンジニアの杉本です!

今回はちょっと使い所が難しい、去年リリースしたばかりの Salesforce Einstein Driverについて紹介していきたいと思います!

Salesforce Einstein って?

f:id:sugimomoto:20190301120221p:plain

Salesforce Einstein は Salesforceが提供するAIプラットフォームの総称となっていて、例えば画像解析のSalesforce Einstein Visonなども含まれます。

今回紹介するのは CData Driver が対応しているのはデータ分析基盤、BI系ツールの分類にあたる「Salesforce Einstein Analytics」になります。

enterprisezine.jp

もともと Wave Analytics という名称で提供されていたものが、現在 Einstein Analyticsという名称で AI を搭載したプラットフォームとして刷新された形のようです。

CData Driver では何ができるの?

Einstein Analytics ではBIソリューションなので、格納されたデータセットを元に、ビジュアライズをし分析を行うといったことがメインの機能になってきます。

AIはそのビジュアライズや分析の過程、インサイトを得るために支援してくれるという形ですね。

f:id:sugimomoto:20190301120249p:plain

CData Driver はそのベースとなるデータセットの操作を支援することがメインになります。

Einstein Analytics ではSalesforce自身のデータを取り込む以外に、CSVAmazon S3からのデータロードに対応しています。

CData DriverではそのCSVファイルアップロードやデータセットの作成、作成済みのデータセットに新しいデータを加えたり、更新したりすることがSQLベースで手軽に行えるようになります。

日々生成されるデータのパッチ処理みたいなことを実現するなら、非常に便利ではないかなと思います。

もちろん、データセットに登録されているデータを取得する、Einstein Analyticsのレンズを通したデータを取得する、といったことも可能ですが、Einstein Analytics自身がデータ分析基盤であるため、その辺はあまりメインのユースケースにはならないかもしれません。

Salesforce Einstein Analytics 環境の取得方法

ちょっとわかりづらかったんですが、通常のDeveloper Edition では使えないので、Analytics 専用ライセンスが有効な組織を作る必要があるみたいです。

一応今の所以下のURLから構成できます。(Promotionsってなっているので今後変わるかも・・・?)

https://developer.salesforce.com/promotions/orgs/analytics-de

f:id:sugimomoto:20190301120316p:plain

環境構成が完了すると、以下のようにAnalytics Studio のアイコンがアプリケーションランチャーに追加されます。

f:id:sugimomoto:20190301120324p:plain

以下のBlogを参考にさせてもらいました。

Salesforce技術ブログ:[Analytics入門]Einstein Analyticsが有効なDeveloper組織を作成する。データストレージも多い!|株式会社日本システムデザイン

接続方法(OAuth用アプリケーションの登録)

接続には OAuthのアプリケーション登録をして、ClientIDとClientSecretを使う必要があります。

詳しい登録方法は以下のヘルプでも紹介していますが、ここでもざっくりとご紹介します。

http://cdn.cdata.com/help/MSD/odbc/pg_connectingtosalesforceeinsteinanalyticsdesktop.htm

まず、[クイック検索]ボックスから[アプリケーションマネージャ]を選択し、[新規接続アプリケーション]をクリックします。

f:id:sugimomoto:20190301120353p:plain

すると以下のようなアプリケーション登録画面が表示されるので、任意の名前とメールアドレス

それから、今回必要となるOAuthの設定として、「OAuth設定の有効化」をチェックし

コールバックURL(デスクトップアプリであればhttp://localhost:33333)と必要な以下の3つの権限を付与して保存します。

  1. Wave データへのアクセスと管理(wave_api
  2. データへのアクセスと管理(api
  3. ユーザーに代わっていつでも要求を実行(refresh_token, offline_token)

f:id:sugimomoto:20190301120403p:plain

保存後、コンシューマ鍵(ClientID)とコンシューマの秘密(ClientSecret)が取得できます。これを使って、CData Driverで接続することが可能です。

f:id:sugimomoto:20190301120414p:plain

画面上での基本的なデータセットの追加方法

まずは基本的なプロセスを確認するために、今回は以下のようなCSVファイルを登録してみました。

Number,FullName,FullNameKana,Gender,Tel,Birthday
1,皆川優,ミナガワマサル,男,0191766057,1966/12/08
2,浦田早百合,ウラタサユリ,女,0731134128,1986/03/10
3,小泉結愛,コイズミユア,女,0748453853,1971/02/11
4,吉沢公子,ヨシザワキミコ,男,0774172720,1960/02/11
5,中森隆明,ナカモリタカアキ,男,0766940436,1976/10/14
6,小堀龍宏,コボリリュウコウ,男,0778125222,1982/02/09
7,天野正康,アマノマサヤス,男,0237759194,1981/10/31
8,栗田幸恵,クリタユキエ,女,0183065618,1977/04/27
9,藤谷喜代,フジタニキヨ,女,0226832467,1987/08/31
10,岩谷広司,イワタニヒロシ,男,0855520680,1972/12/24

画面上でデータセットを追加する場合は、以下のプロセスを踏みます。

Einstein Analyticsの画面から新規データセットの登録画面へ移動し

f:id:sugimomoto:20190301120427p:plain

CSVファイル」を選択

f:id:sugimomoto:20190301120434p:plain

アップロードするCSVファイルとして先程のファイルを選択します。

f:id:sugimomoto:20190301120439p:plain

次にデータセットの名前やCSVのフォーマット確認を行うのですが

f:id:sugimomoto:20190301120445p:plain

ここでポイントになるのがデータスキーマファイルです。

通常CSVファイルは各項目の定義情報が含まれていないので、Salesforce Einstein Analytics はどんな型のどんなデータなのか? といったことがわかりません。

それを初期状態でまずざっくりと判別した結果がこのデータスキーマファイルになります。

おそらく最初の何件かを元に型を特定し、生成しているのではないかなと思います。

{
    "fileFormat": {
        "charsetName": "UTF-8",
        "fieldsDelimitedBy": ",",
        "linesTerminatedBy": "\r\n"
    },
    "objects": [
        {
            "connector": "CSV",
            "fullyQualifiedName": "personal_infomation_csv",
            "label": "personal_infomation.csv",
            "name": "personal_infomation_csv",
            "fields": [
                {
                    "fullyQualifiedName": "Number",
                    "name": "Number",
                    "type": "Numeric",
                    "label": "Number",
                    "precision": 18,
                    "defaultValue": "0",
                    "scale": 0,
                    "format": "0"
                },
                {
                    "fullyQualifiedName": "FullName",
                    "name": "FullName",
                    "type": "Text",
                    "label": "FullName"
                },
                {
                    "fullyQualifiedName": "FullNameKana",
                    "name": "FullNameKana",
                    "type": "Text",
                    "label": "FullNameKana"
                },
                {
                    "fullyQualifiedName": "Gender",
                    "name": "Gender",
                    "type": "Text",
                    "label": "Gender"
                },
                {
                    "fullyQualifiedName": "Tel",
                    "name": "Tel",
                    "type": "Numeric",
                    "label": "Tel",
                    "precision": 18,
                    "defaultValue": "0",
                    "scale": 0,
                    "format": "0"
                },
                {
                    "fullyQualifiedName": "Birthday",
                    "name": "Birthday",
                    "type": "Text",
                    "label": "Birthday"
                }
            ]
        }
    ]
}

必要に応じてこれを調整することで、最終的にAnalyticsを実施するためのフォーマットに合わせます。

特に数値データなのか? 日付データなのか? といった情報は重要性がますので、よく確認しておきましょう。

また、このデータは後々 CData Driver でも利用するので、保存しておくことを推奨します。

あとは必要に応じてUIベースで項目属性を調整すれば

f:id:sugimomoto:20190301120508p:plain

データセットの作成が進んでいきます。

f:id:sugimomoto:20190301120515p:plain

以上でデータセットの作成が完了です。

f:id:sugimomoto:20190301120521p:plain

あとはレンズや対話型の分析機能を使って、ビジュアライズを進めていくことができます。

f:id:sugimomoto:20190301120527p:plain

CData Driver を使った接続方法

基本的な接続プロパティは以下のとおりです。事前に登録したOAuthの各種パラメータを設定してください。

  1. InitiateOAuth=GETANDREFRESH;
  2. OAuthClientId=事前に取得したコンシューマ鍵(ClientID);
  3. OAuthClientSecret=事前に取得したコンシューマの秘密(ClientSecret);
  4. CallbackURL=http://localhost:33333;
  5. MetadataFilesLocation=C:\Testdata\Einstein\metadata.json;

MetadataFilesLocationに指定するのは、先程紹介した「データスキーマファイル」になります。

CData Driver 経由でのデータの取得方法

取得方法で特に難しいところはありません。

登録されているデータセットがテーブルの一覧、レンズがビューの一覧として構成され、アクセスすることができるようになります。

先程登録したCSVファイルも以下のようにSELECT * FROM Dataset_DatasetName でアクセスすることができるようになります。

f:id:sugimomoto:20190301120534p:plain

CData Driver 経由でのデータセットの追加・更新方法

CData Driver 上からは、データセットを操作する方法は 2つのパターンがあります。

1.CSVを元にデータセットを作成したい場合

CSVを元にデータセットを作成したい場合はUploadCSVToDataSet のストアドプロシージャーを使います。

Execute UploadCSVToDataSet 
@DataSetName = 'SampleDataset', 
@CSVFileLocation = 'C:\\Testdata\\Einstein\\Target.csv', 
@Operation = 'Overwrite';

これでアップロードを行うと、CSVメタデータ定義はSalesforce Einstein が自動的に実施します。

もし、独自にメタデータ定義を行いたい場合は、前述したデータスキーマファイルのJSON定義をもとに以下のパラメータを付け加えます。

@MetadataFilesLocation = 'C:\\Testdata\\Einstein\\metadata.json'; // Option

一つ注意点として、Operation が上記例ではOverwriteになっているので、対象のデータセットがすでに存在する場合は、新しくデータセットを作成せず、上書きを行います。

2.作られたデータセットにデータを追加したい場合

すでにデータセットは作成されていて、そのデータセットに対してデータを追加したい場合は「Insert」もしくは先程と同じように「UploadCSVToDataSet 」を使います。

「UploadCSVToDataSet 」の場合は、Operation を Append に指定すればOKです。

「Insert」の場合はちょっと注意が必要で、接続文字列の「MetadataFilesLocation」に対象のデータセットのデータスキーマファイルファイルを指定する必要があります。(MetadataFilesLocationへのJSONファイルは、一つしか指定できないので要注意)

Insert into Dataset_Personal_infomation(Birthday,FullName,FullNameKana,Gender,Number,Tel)
values("2019-01-01","杉本 和也","スギモト カズヤ","男",11,3423431231);

f:id:sugimomoto:20190301120605p:plain

ちなみに一括Insertも対応しているので、大量のデータを登録する場合はこちらを利用してみてください。

http://cdn.cdata.com/help/MSD/odbc/pg_salesforceeinsteinnnalyticsinserts.htm

既存データセットのデータスキーマファイル(JSON)の取得方法

いろいろと調べたのですが、現在既存のデータセットからデータスキーマファイルを入手する方法は無いみたいです。

もし、手元に登録したもととなるCSVファイルがあれば、そのCSVファイルを使って新しくデータセットを登録する過程の画面で取得できます。

f:id:sugimomoto:20190301120616p:plain

そこまで難しい構成の内容でも無いので、ベースを元にカスタマイズして使うのが一番適切なアプローチかもしれません。

リファレンスは以下のものを参考にすると良さげです。

developer.salesforce.com

終わりに

ちなみに前述の通りSalesforce Einstein はCSVSalesforceのデータを取り込む以外にも、Amazon S3のファイルを取り込むといった機能がサポートされています。

CData Sync では Amazon S3をサポートしているので、それと組み合わせてデータローダーを構成するというのも一つアプローチとしてはありかもしれません。

ちょっと時間を見つけて今後検証してみたいところです。