Go-MySQL-Driver を使って Salesforce のデータをCData Connect 経由で取得してみる:CData Connect MySQL Wire protocol

by 杉本和也 | 2021年04月07日

f:id:sugimomoto:20210407095504p:plain

こんにちは。CData Software Japanリードエンジニアの杉本です。

このBlogでもちょくちょく紹介しているCData Connect はSalesforce や KintoneなどのクラウドサービスAPIに接続するためのプロトコルとしてTDS(SQL Server)・MySQL(MySQL Wire protocol)・ODataの3種類をサポートしています。

www.cdata.com

通常であれば、以下のBlogのようにBIツールやローコードサービスが持つMySQLインターフェースを通じて活用するのが主な利用シナリオですが、各種プログラミング言語から直接それぞれのインターフェースを使うことももちろん可能です。

www.cdatablog.jp

というわけで今回はプリミティブな使い方として、Go言語からMySQL Wire protocolを通じて、Salesforce のデータにアクセスする方法を紹介したいと思います。

なお、MySQL Workbenchからアクセスする方法は以下のページを参照してみてください。

www.cdatablog.jp

利用するGo パッケージ

Go パッケージは以下の「go-sql-driver/mysql」を使います。予め「go get」しておきましょう。

github.com

go get -u github.com/go-sql-driver/mysql

Go は「database/sql」パッケージを通じて、Driver化された各種DBに接続するので、基本的な操作方法は「database/sql」に依存します。

golang.org

個人的にこのRDB接続用の汎用的なインターフェースを備えている点は、Go言語の好きな部分です。

CData Connect にSalesforce データを接続

Goで作業を始める前にまずCData Connect側の準備をしてしまいましょう。

CData Connect (旧CloudHub) のアカウントを取得します。CData Connect はSaaS ですので、アカウントを取得したらインストールやホスティングなどなく、ブラウザからログインすることですぐに使用開始です。

早速ブラウザからCData Connect にログインします。「DATABASE」タブから仮想データベースを設定していきます。まずは接続するデータソースであるSalesforce のアイコンをクリックします。

f:id:cdatasoftware:20201016155823p:plain

データソース接続画面が開くので、データソース毎の認証情報を入力します。Salesforce の場合はUser、Password、Security Token を入力することでデータにアクセスすることができます。

f:id:cdatasoftware:20201016155923p:plain

次に「ENDPOINTS」タブで、このデータをどのインターフェースのエンドポイントして公開するかを選択します。デフォルトで、OData、MySQL wire protocol、TDS(SQL Server) wire Protocol がすべて有効になっています。

必要があればアクセスを許可する信頼されたIP アドレスを指定することも可能です。

f:id:cdatasoftware:20201014212922p:plain

最後に公開したデータにアクセスできるユーザーとトークンを作成します。「USERS」タブからユーザーを作成するとトークンが生成されます。

f:id:cdatasoftware:20201014212650p:plain

これでCData Connect でSalesforce データを扱う準備ができました。

Go から CData Connectに接続

それでは実際に Go で CData Connect に接続してみましょう。

接続設定はMySQLに接続する方法と一緒です。予め作成したユーザーID・パスワードとCData ConnectのMySQL エンドポイントをTCPで指定して接続します。

注意点としては、エンドポイントがTLSになっているので「?tls=true」を指定しておくことです。

db, err := sql.Open("mysql", "USER_NAME:PASSWORD@tcp(TENANT_NAME.cdatacloud.net:3306)/Salesforce1?tls=true")

あとは「database/sql」のクエリ方法に従って、SQLを発行するだけです。

https://golang.org/pkg/database/sql/#DB.Query

今回はSalesforceの取引先(Account)のデータを取得してみました。

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    fmt.Println("Connect to CData Connect by MySQL Wire protocol")
    db, err := sql.Open("mysql", "USER_NAME:PASSWORD@tcp(TENANT_NAME.cdatacloud.net:3306)/Salesforce1?tls=true")

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    defer db.Close()

    rows, err := db.Query("SELECT Id,Name from Account limit 10")

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    for rows.Next() {
        var account Account
        rows.Scan(&account.Id, &account.Name)

        fmt.Printf("%s \n", account)
    }
}

type Account struct {
    Id   string
    Name string
}

以下のように結果が表示されればOKです。

Connect to CData Connect by MySQL Wire protocol
{0012800000tNPqdAAG CData Software Japan LLC} 
{00128000008KCGYAA4 GenePoint} 
{00128000008KCGWAA4 United Oil & Gas, UK} 
{00128000008KCGXAA4 United Oil & Gas, Singapore} 
{00128000008KCGOAA4 Edge Communications} 
{00128000008KCGPAA4 Burlington Textiles Corp of America} 
{00128000008KCGQAA4 Pyramid Construction Inc.} 
{00128000008KCGRAA4 Dickenson plc} 
{00128000008KCGSAA4 Grand Hotels & Resorts Ltd} 
{00128000008KCGUAA4 Express Logistics and Transport 23} 

ソースコード

github.com

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。