接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でApacheImpala Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module ApacheImpalaCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module ApacheImpalaCmdlets;
Connect-ApacheImpala cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-ApacheImpala -Server '127.0.0.1' -Port '21050'
Apache Impala への接続
Apache Impala に接続するには、以下を設定します。
- Server:SQL Server インスタンスの名前またはネットワークアドレス名。
- Port:Impala Server インスタンスへの接続用のポート。
- ProtocolVersion:Impala サーバーへの接続時に使用するThrift プロトコルバージョン。
- Database(オプション):SQL クエリで指定されていない場合に使用するデフォルトのデータベース。これにより、クエリでdatabase.tablename を指定することなくテーブル名を使用できます。
- Pagesize(オプション):データを選択するときにApache Impala からプルするページあたりの結果数。
- QueryPassthrough(オプション):クエリをas-is でImpala に渡すかどうかを示します。
- UseSSL(オプション):TLS/SSL を有効にするには、これを設定します。
QueryPassthrough がfalse(デフォルト)に設定されている場合、CData ADO.NET Provider for Apache Impala はImpala が必要とする形式に適合するようにクエリを変更しようとします。
Apache Impala への認証
Apache Impala を認証する方法は、以下のようにいくつかあります。
- NoSasl
- LDAP
- Kerberos
NoSasl
NoSasl を使用する場合、認証は行われません。ローカルネットワーク上のテストマシンなどの信頼できる場所からサーバーに接続する場合に使用されます。 デフォルトでは、NoSasl はデフォルトのAuthScheme であるため、追加の接続プロパティを設定する必要はありません。
LDAP
LDAP で認証するには、次の接続プロパティを設定します。
- AuthScheme:LDAP に設定。
- User:ログインするユーザーに設定。
- Password:ユーザーのパスワードに設定。
Kerberos
AuthScheme プロパティをKerberos に設定します。Kerberos で認証する方法についての詳細は、Kerberos の使用 を参照してください。
データの取得
Select-ApacheImpala cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-ApacheImpala -Connection $conn -Table "[CData].[Default].Customers" -Columns @("City, CompanyName") -Where "Country='US'"Invoke-ApacheImpala cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-ApacheImpala -Connection $conn -Table [CData].[Default].Customers -Where "Country = 'US'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\my[CData].[Default].CustomersData.csv -NoTypeInformation
Select-ApacheImpala からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-ApacheImpala -Server '127.0.0.1' -Port '21050' PS C:\> $row = Select-ApacheImpala -Connection $conn -Table "[CData].[Default].Customers" -Columns (City, CompanyName) -Where "Country = 'US'" | select -first 1 PS C:\> $row | ConvertTo-Json { "Connection": { }, "Table": "[CData].[Default].Customers", "Columns": [ ], "City": "MyCity", "CompanyName": "MyCompanyName" }
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをApache Impala にロードします。
Import-Csv -Path C:\My[CData].[Default].CustomersUpdates.csv | %{ $record = Select-ApacheImpala -Connection $conn -Table [CData].[Default].Customers -Where ("_id = `'"+$_._id+"`'") if($record){ Update-ApacheImpala -Connection $conn -Table [CData].[Default].Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName) -Where "_id = `'$_._id`'" }else{ Add-ApacheImpala -Connection $conn -Table [CData].[Default].Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName) } }