接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でSparkSQL Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module SparkSQLCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module SparkSQLCmdlets;
Connect-SparkSQL cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-SparkSQL -Server '127.0.0.1'
Spark SQL への接続
Spark SQL への接続を確立するには以下を指定します。
- Server:SparkSQL をホストするサーバーのホスト名またはIP アドレスに設定。
- Port:SparkSQL インスタンスへの接続用のポートに設定。
- TransportMode:SparkSQL サーバーとの通信に使用するトランスポートモード。有効な入力値は、BINARY およびHTTP です。デフォルトではBINARY が選択されます。
セキュアなSpark SQL への接続
本製品 においてTLS/SSL を有効化するには、UseSSL をTrue に設定します。
Spark SQL への認証
The service may be authenticated to using the PLAIN, LDAP, NOSASL, KERBEROS auth schemes.
PLAIN
PLAIN で認証するには、次の接続プロパティを設定します。
- AuthScheme:PLAIN に設定。
- User:ログインするユーザーに設定。
- Password:ユーザーのパスワードに設定。
LDAP
LDAP で認証するには、次の接続プロパティを設定します。
- AuthScheme:LDAP に設定。
- User:ログインするユーザーに設定。
- Password:ユーザーのパスワードに設定。
NOSASL
NOSASL を使用する場合、認証は行われません。次の接続プロパティを設定します。
- AuthScheme:NOSASL に設定。
Kerberos
Kerberos での認証方法についての詳細は、Kerberos の使用 を参照してください。
Databricks への接続
Databricks クラスターに接続するには、以下の説明に従ってプロパティを設定します。Note:必要な値は、[クラスター]に移動して目的のクラスターを選択し、 [Advanced Options]の下にある[JDBC/ODBC]タブを選択することで、Databricks インスタンスで見つけることができます。
- Server:Databricks クラスターのサーバーのホスト名に設定。
- Port:443
- TransportMode:HTTP
- HTTPPath:Databricks クラスターのHTTP パスに設定。
- UseSSL:True
- AuthScheme:PLAIN
- User:ログインするユーザーに設定。
- Password:個人用アクセストークンに設定(値は、Databricks インスタンスの[ユーザー設定]ページに移動して[アクセストークン]タブを選択することで取得できます)。
データの取得
Select-SparkSQL cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-SparkSQL -Connection $conn -Table "Customers" -Columns @("City, CompanyName") -Where "Country='US'"
Invoke-SparkSQL cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-SparkSQL -Connection $conn -Table Customers -Where "Country = 'US'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myCustomersData.csv -NoTypeInformation
Select-SparkSQL からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-SparkSQL -Server '127.0.0.1'
PS C:\> $row = Select-SparkSQL -Connection $conn -Table "Customers" -Columns (City, CompanyName) -Where "Country = 'US'" | select -first 1
PS C:\> $row | ConvertTo-Json
{
"Connection": {
},
"Table": "Customers",
"Columns": [
],
"City": "MyCity",
"CompanyName": "MyCompanyName"
}
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをSpark SQL にロードします。
Import-Csv -Path C:\MyCustomersUpdates.csv | %{
$record = Select-SparkSQL -Connection $conn -Table Customers -Where ("_id = `'"+$_._id+"`'")
if($record){
Update-SparkSQL -Connection $conn -Table Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName) -Where "_id = `'$_._id`'"
}else{
Add-SparkSQL -Connection $conn -Table Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName)
}
}