接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でRedshift Cmdlets を使用する例を示します。
Amazon Redshift への接続
Amazon Redshift に接続するには、通常次の接続プロパティが必要です。
- Server:Amazon Redshift データベースをホスティングしているサーバーのホスト名またはIP アドレス。
- Database:Amazon Redshift クラスター用に作成したデータベース。
- Port(オプション):Amazon Redshift データベースをホスティングしているサーバーのポート。デフォルトは5439です。
以下の手順に従って、これらの値をAWS マネージメントコンソールで取得できます。
- Amazon Redshift コンソールを開きます(http://console.aws.amazon.com/redshift)。
- Clusters ページで、クラスターの名前をクリックします。
- Configuration タブで"Cluster Database Properties" セクションからプロパティを取得します。接続プロパティの値は、ODBC URL で設定された値と同じになります。
本製品 は、SSL 暗号化を使用してAmazon Redshift サーバーとのセキュアな通信を提供します。オプションで、UseSSL をfalse に設定して、SSL 暗号化をオフにすることができます。
SSL 認証を活用してAmazon Redshift データに接続することもできます。そのためには、次の接続プロパティを設定してください。
- SSLClientCert:クライアント証明書のための証明書ストア名。クライアントとサーバーの両方のマシンでトラストストアとキーストアが保持される2-way SSL の場合に使用されます。
- SSLClientCertPassword:クライアント証明書ストアがパスワードで保護されている場合、この値をストアのパスワードに設定します。
- SSLClientCertSubject:TLS / SSL クライアント証明書のサブジェクト。ストア内の証明書を検索するために使用されます。
- SSLClientCertType:クライアントストアの証明書タイプ。
- SSLServerCert:サーバーが受け入れ可能な証明書。
接続文字列の例(標準的なユーザー名とパスワードの組み合わせ、SSL 暗号化は無効)
User=username;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;UseSSL=false;"
Amazon Redshift への認証
CData Cmdlets PowerShell Module for Amazon Redshift は、標準認証情報、IAM クレデンシャル、ADFS、Ping Federate、Microsoft Entra ID(Azure AD)、またはAzure AD PKCE を使用した認証に対応しています。
標準認証
ログイン資格情報を使用してAmazon Redshift に接続するには、以下のプロパティを設定します。- AuthScheme:Basic。
- User:認証するユーザーのログイン情報。
- Password:認証するユーザーのパスワード。
接続文字列の例:
AuthScheme=Basic;User=user;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;
IAM クレデンシャル
AuthScheme をIAMCredentials に設定します。接続文字列の例:
AuthScheme=IAMCredentials;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;User=your_user;AWSAccessKey=your_access_key;AWSSecretKey=your_secretkey;
一時的な資格情報を使用したIAM ロールで接続する場合は、AWSSessionToken も適用する必要があります。
オプションで以下を適用できます。
- AutoCreate:接続中にデータベースユーザーが存在しない場合は、User に指定した名前でデータベースユーザーを作成します。
- DbGroups:データベースユーザーが現在のセッションに参加するデータベースグループ。
ADFS
ADFS に接続するには以下のプロパティを設定します。
- AuthScheme:ADFS。
- User:認証するADFS ユーザー。
- Password:認証するADFS ユーザーのパスワード。
- SSOLoginURL:SSO プロバイダーのログインURL。
接続文字列の例:
AuthScheme=ADFS;User=username;Password=password;SSOLoginURL='https://sts.company.com';
ADFS 統合
ADFS 統合フローでは、現在Windows にログインしているユーザーの資格情報を使用して接続します。 ADFS 統合フローを使用するには、User およびPassword を指定せず、それ以外の設定は上記のADFS に記載された手順に従ってください。
PingFederate
PingFederate に接続するには、次のプロパティを設定します。- AuthScheme:PingFederate。
- User:認証するPingFederate ユーザー。
- Password:認証するユーザーのPingFederate パスワード。
- SSOLoginURL:SSO プロバイダーのログインURL。
- AWSRoleARN(オプション):複数のロールARN がある場合は、認可に使用するARN を指定します。
- AWSPrincipalARN(オプション):複数のプリンシパルARN がある場合は、認可に使用するARN を指定します。
- SSOProperties(オプション):Amazon S3へのリクエストにユーザー名とパスワードを認可ヘッダーとして含める場合は、Authscheme=Basic に設定します。
SSOLoginURL 用の相互SSL 認証(WS-Trust STS エンドポイント)を有効化するには、次の SSOProperties を設定します。
接続文字列の例:
Server=redshift-cluster-1.xxxxxxxxxxxx.us-east-1.redshift.amazonaws.com;Database=dev;Port=5439;UseSSL=true;SSLServerCert=*;AuthScheme=PingFederate;AutoCreate=TRUE;SSOLoginURL=https://mycustomserver.com:9033/idp/sts.wst;SSOExchangeUrl=https://us-east-1.signin.aws.amazon.com/platform/saml/acs/764ef411-xxxxxx;User=admin;Password=PassValue;AWSRegion=NORTHERNVIRGINIA;
Microsoft Entra ID(Azure AD)
Note:Microsoft はAzure AD をEntra ID にリブランドしました。ユーザーがEntra ID 管理サイトを操作する必要があるトピックでは、Microsoft が使用している名称と同じものを使用します。ただし、名前または値が"Azure AD" を参照しているCData 接続プロパティは、依然として存在します。
Azure AD 経由で認証を行うには、B2C ではないAzure テナントと有効なAzure AD アカウントが必要です。
Azure AD で認証する前に、以下のタスクを完了する必要があります。
- OAuth アプリケーションの作成と登録
- Redshift クライアントアプリケーションの作成と設定
- 新しいID プロバイダーの定義
- 接続プロパティの指定
以下のセクションでは、これらのタスクについて詳しく説明します。
OAuth アプリケーションの作成
Azure AD を介してAmazon Redshift データベースにログインするためのカスタムOAuth アプリケーションを作成するには:- Azure Active Directory 概要 ページにある左のナビゲーションバーで、アプリの登録をクリックします。 ポータルにアプリの登録ページが表示されます。
- 新規登録をクリックします。 アプリの登録ページが表示されます。
- 必須の情報を入力します。
- 名前に名前を入力します(例:"oauth_application")。
- Redirect URI にPublic client/native (mobile and desktop) を選択し、有効なURL(例:http://localhost:33333/)を入力します。
- 詳細を保存するため、登録をクリックします。 ポータルに、新しく作成されたアプリケーションの詳細が表示されます。
- 後で使用するために、CallbackURL プロパティの値を保存します。
- 新しいアプリケーションの概要ページで、左側のナビゲーションバーに移動します。
- 証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。 ポータルに、クライアントシークレットの追加ウィンドウが表示されます。
- 必須の情報を入力します。
- ウィンドウ下部の追加をクリックします。ポータルがクライアントシークレットを作成します。
- 後で使用するために、OAuthClientSecret(表示されるOAuth シークレットの値フィールド)を控えておきます。
- 左のナビゲーションバーで、API の公開をクリックします。
- App ID URI の横の設定をクリックします。 登録時に入力した情報を含むSet the App ID URI ダイアログが表示されます。
- 保存をクリックします。
- スコープの追加をクリックします。
- 必須の情報を入力します。
- スコープの追加をクリックします。
- 後で使用するために、生成されたApplication ID URI およびAPI scope を保存します。 これらは、api://6256f0b1-2284-43e4-8501-6e53dec4444f やapi://6256f0b1-2284-43e4-8501-6e53dec4444f/jdbc_login のような形式になります。
Redshift クライアントアプリケーションの作成
Amazon Redshift データベースのクライアントアプリケーションとして機能する別のアプリケーションを作成するには:- Azure Active Directory 管理ページに移動します。
- アプリの登録をクリックします。
- ページ上部の新規登録をクリックします。 アプリの登録ページが表示されます。
- 必須の情報を入力します。
- 登録をクリックします。 ポータルによってRedshift クライアントアプリケーションが作成され、その概要ページが表示されます。
- 左のナビゲーションバーで、証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。 ポータルに、クライアントシークレットの追加ウィンドウが表示されます。
- 必須の情報を入力します。
- 追加をクリックします。
- 後で使用するために、OAuthClientSecret(表示されるOAuth シークレットの値フィールド)を控えておきます。
- 新しいクライアントアプリケーションの管理ページに移動します。
- 左のナビゲーションバーで、API のアクセス許可をクリックします。
- アクセス許可の追加をクリックします。
- Microsoft Graph API を選択します。
- アプリケーションの許可をクリックします。
- Directory -> Directory.Read.All を選択します。
- 追加をクリックします。
- 管理者の同意を与えますをクリックします。
- はいをクリックします。
- Azure Active Directory の左のナビゲーションバーで、グループをクリックします。 ポータルにグループページが表示されます。
- 新しいグループをクリックします。
- 必須の情報を入力します。
- 所有者が選択されていませんをクリックします。 ポータルに所有者を追加ウィンドウが表示されます。
- このアプリケーションの所有者とするユーザーを選択します。
- 作成をクリックします。
新しいId プロバイダーを定義
新しいテーブルを定義するには:- Azure Active Directory 概要 ページで、左のナビゲーションペインからアプリの登録を選択します。
- すべてのアプリケーションタブを選択し、先ほど作成したOAuth アプリケーションを選択します。 ポータルにOAuth 画面が表示されます。
- 左のナビゲーションバーで、マニフェストをクリックします。
- エディターでaccessTokenAcceptedVersion を探します。値がNULL の場合、v1.0 トークンです。値が2の場合はv2.0 トークンです。
- Amazon Redshift インスタンスのクエリボックスから、以下の例に従ってId プロバイダーのクエリを送信します。
CREATE IDENTITY PROVIDER oauth_standard TYPE azure NAMESPACE 'mynamespace' PARAMETERS '{ "issuer":"https://sts.windows.net/your_tenant_here/", "client_id":"YourClientId", "client_secret":"YourClientSecret", "audience":["your_application_id_uri_here"] }'用語説明
- issuer ID: トークンを受け取る際に信頼する発行者ID。発行者には、tenant_id の一意な識別子が付加されます。v1.0 トークンを使用する場合、https://sts.windows.net/<your_tenant_id_here>/ を使用します。V2.0 トークンを使用する場合、https://login.microsoftonline.com/<your_tenant_id_here>/v2.0/ を使用します。
- client_id: Id プロバイダーに登録されたアプリケーションの一意の公開識別子。これをアプリケーションID と呼びます。2つ目のアプリケーション(Amazon Redshift クライアントアプリケーション)用に生成されたクライアントID です。
- client_secret: ID プロバイダーおよび登録されたアプリケーションにのみ知られている秘密の識別子、またはパスワード。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントシークレットです。
- audience: 1つ目のアプリケーション(OAuth アプリケーション)に割り当てられたアプリケーションID(URI)。
NAMESPACE には好きな名前を使用できます。
- Amazon Redshift で、CREATE IDENTITY PROVIDER クエリ(例として上記)をクエリテキストボックスに配置します。
- Run をクリックします。
- クエリテキストボックスで、以下の形式でRedshift データベース上にロールを作成します。
create role "mynamespace:myazuregroup";
mynamespace を、CREATE IDENTITY PROVIDER クエリで提供されたID プロバイダーの名前空間と、先に作成したAzure グループの名前に置き換えてください。 - クエリボックスの下部にあるRun をクリックします。
- クエリテキストボックスで、この新しいロールに以下のようにテーブルアクセス権を付与します。
grant select on all tables in schema public to role "mynamespace:myazuregroup";
上記の例を、自分の名前空間とAzure グループ名に置き換えてください。 - Run をクリックします。
接続プロパティの設定
次のプロパティを設定します。- AuthScheme:AzureAD。
- Server:Amazon Redshift サーバーエンドポイントの名前。
- Database:接続するAmazon Redshift データベースの名前。
- User:認証するAmazon Redshift ユーザーの名前。
- AzureTenant:OAuth およびクライアントアプリケーションが作成されたAzure テナントのID。アプリケーションの1つの概要ページにあるディレクトリ(テナント)ID を確認してください。
- SSOLoginURL:OAuth アプリケーションの概要ページで確認できるアプリケーションID のURI の値。
- Scope:v1.0 OAuth トークンの場合、OAuth アプリケーションのAPI の公開ページにあるスコープフィールド名に設定。v2.0 OAuth トークンの場合は、OAuth アプリケーションのクライアントID と同じです。
- OAuthClientId:作成したAmazon Redshift クライアントアプリケーションの概要ページにある、1つ目のOAuth アプリケーションのクライアントID。
- OAuthClientSecret:クライアントアプリケーションの証明書とシークレットページにある、1つ目のOAuth アプリケーションのOAuth クライアントシークレットの値に設定。
- CallbackURL:OAuth アプリケーションのコールバックURL。
トラブルシューティング
"Azure JWT token does not have 'upn' field" エラーが発生した場合:- Azure Active Directory の管理ページで、アプリの登録に移動し、自身のOAuth アプリケーションを選択します。
- 左のナビゲーションバーでトークン構成をクリックします。
- Add optional claim をクリックします。
- Add optional claim 画面で、Token type の下のAccess をクリックします。
- Claim カラムの下のupn を選択します。
- 下部の追加をクリックします。
- Turn on the Microsoft Graph profile permission (required for claims to appear in the token) を選択します。
- 追加をクリックします。
- このプロセスをクライアントアプリケーションでも繰り返します。
- 再度接続を試みてください。
Azure AD PKCE
Note:Microsoft はAzure AD をEntra ID にリブランドしました。ユーザーがEntra ID 管理サイトを操作する必要があるトピックでは、Microsoft が使用している名称と同じものを使用します。ただし、名前または値が"Azure AD" を参照しているCData 接続プロパティは、依然として存在します。
Azure AD PKCE で認証する前に、以下のタスクを完了する必要があります。
- OAuth アプリケーションの作成と登録
- Redshift クライアントアプリケーションの作成と設定
- 新しいID プロバイダーの定義
- 接続プロパティの指定
以下のセクションでは、これらのタスクについて詳しく説明します。
OAuth アプリケーションの作成と登録
Azure AD PKCE を介してAmazon Redshift データベースにログインするためのカスタムOAuth アプリケーションを作成するには:
- Azure Active Directory 概要 ページにある左のナビゲーションバーで、アプリの登録をクリックします。 ポータルにアプリの登録ページが表示されます。
- 新規登録をクリックします。 アプリの登録ページが表示されます。
- 必須の情報を入力します。
- 名前に名前を入力します(例:"oauth_application")。
- Redirect URI にPublic client/native (mobile and desktop) を選択し、有効なURL(例:http://localhost:33333/)を入力します。
- 詳細を保存するため、登録をクリックします。 ポータルに、新しく作成されたアプリケーションの詳細が表示されます。
- 後で使用するために、CallbackURL プロパティの値を保存します。
- 新しいアプリケーションの概要ページで、左側のナビゲーションバーに移動します。
- API の公開をクリックします。
- アプリケーションID URI の横の設定をクリックします。 登録時に入力した情報を含むSet the App ID URI ダイアログが表示されます。
- 保存をクリックします。
- スコープの追加をクリックします。
- 必須の情報を入力します。
- スコープの追加をクリックします。
- 後で使用するために、生成されたApplication ID URI およびAPI scope を保存します。 これらは、api://6256f0b1-2284-43e4-8501-6e53dec4444f やapi://6256f0b1-2284-43e4-8501-6e53dec4444f/jdbc_login のような形式になります。
Redshift クライアントアプリケーションの作成
Amazon Redshift データベースのクライアントアプリケーションとして機能する別のアプリケーションを作成するには:- Azure Active Directory 概要ページに移動します。
- 左のナビゲーションバーでアプリの登録をクリックします。
- アプリの登録ページ上部の新規登録をクリックします。 アプリの登録ページが表示されます。
- 必須の情報を入力します。
- 登録をクリックします。 ポータルによってRedshift クライアントアプリケーションが作成され、その概要ページが表示されます。
- 左のナビゲーションバーで、証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。 ポータルに、クライアントシークレットの追加ウィンドウが表示されます。
- 必須の情報を入力します。
- 追加をクリックします。
- OAuthClientSecret を控えておきます(表示されるOAuth シークレットの値フィールド)。
- クライアントアプリケーションの管理ページの左のナビゲーションバーで、API のアクセス許可をクリックします。
- アクセス許可の追加をクリックします。
- Microsoft Graph API を選択します。
- アプリケーションの許可をクリックします。
- Directory -> Directory.Read.All を選択します。
- 追加をクリックします。
- 管理者の同意を与えますをクリックします。
- はいをクリックします。
- Azure Active Directory の左のナビゲーションバーで、グループをクリックします。 ポータルにグループページが表示されます。
- 新しいグループをクリックします。
- 必須の情報を入力します。
- 所有者が選択されていませんをクリックします。 ポータルに所有者を追加ウィンドウが表示されます。
- このアプリケーションの所有者とするユーザーを選択します。
- 作成をクリックします。
新しいId プロバイダーを定義
新しいId プロバイダーを定義するには:
- Azure Active Directory の左のナビゲーションバーでアプリの登録をクリックします。
- すべてのアプリケーションタブを選択し、先ほど作成したOAuth アプリケーションを選択します。 ポータルにOAuth 画面が表示されます。
- 左のナビゲーションバーで、マニフェストをクリックします。
- エディターでaccessTokenAcceptedVersion を探します。値がNULL または1の場合、v1.0 トークンです。値が2の場合はv2.0 トークンです。
- Amazon Redshift インスタンスのクエリボックスから、以下の例に従ってId プロバイダのクエリを送信します。
CREATE IDENTITY PROVIDER oauth_standard TYPE azure NAMESPACE 'mynamespace' PARAMETERS '{ "issuer":"https://sts.windows.net/your_tenant_here/", "client_id":"YourRedshiftApplicationClientId", "client_secret":"YourRedshiftApplicationClientSecret" ,"audience":["your_oauth_application_id_uri_here"] }'v2.0 トークン発行者の場合、この値が必要です。"issuer":"https://login.microsoftonline.com/your_tenant_here/v2.0",
用語説明- issuer ID:トークンを受け取る際に信頼する発行者ID。発行者には、tenant_id の一意な識別子が付加されます。v1.0 トークンを使用する場合、https://sts.windows.net<your_tenant_id_here> を指定します。v2.0 トークンを使用する場合、https://login.microsoftonline.com<your_tenant_id_here>/v2.0. を指定します。
- client_id:Id プロバイダーに登録されたアプリケーションの一意の公開識別子。これをアプリケーションID と呼びます。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントID です。
- client_secret:ID プロバイダーおよび登録されたアプリケーションにのみ知られている秘密の識別子、またはパスワード。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントシークレットです。
- audience:1つ目のアプリケーション(OAuth アプリケーション)に割り当てられたアプリケーションID(URI)。
NAMESPACE には好きな名前を使用できます。
- Amazon Redshift で、CREATE IDENTITY PROVIDER クエリ(例として上記)をクエリテキストボックスに配置します。
- クエリボックスの下部にあるRun をクリックします。
- クエリテキストボックスで、以下の形式でRedshift データベース上にロールを作成します。
create role "mynamespace:myazuregroup";
- mynamespace を、CREATE IDENTITY PROVIDER クエリで提供されたID プロバイダーの名前空間と、先に作成したAzure グループの名前に置き換えてください。
- Run をクリックします。
- クエリテキストボックスで、この新しいロールに以下のようにテーブルアクセス権を付与します。
grant select on all tables in schema public to role "mynamespace:myazuregroup";
- 上記の例を、自分の名前空間とAzure グループ名に置き換えてください。
- Run をクリックします。
接続プロパティの設定
上記の設定を終えたら、Amazon Redshift に接続するドライバーに以下のプロパティを指定します。
- AuthScheme:AzureADPKCE。
- Server:Amazon Redshift サーバーエンドポイントの名前。
- Database:接続先のAmazon Redshift データベースの名前。
- Scope:v1.0 OAuth トークンの場合、OAuth アプリケーションのAPI の公開ページにあるスコープフィールドに設定(例:api://d3cb3521-6c20-4e41-b16d-e48c8444ee11/jdbc_login)。v2.0 OAuth トークンの場合は、OAuth アプリケーションのクライアントID と同じです(例:d3cb3521-6c20-4e41-b16d-e48c8444ee11)。
- OAuthClientId:作成したOAuth アプリケーションの概要ページにある、アプリケーション(クライアント)ID。
- CallbackURL:OAuth アプリケーションのコールバックURL。
トラブルシューティング
"Azure JWT token does not have 'upn' field" エラーが発生した場合:- Azure Active Directory 管理ページで、アプリの登録に移動し、自身のOAuth アプリケーションを選択します。
- 左のナビゲーションバーでトークン構成 -> Add Optional claim を選択します。
- Add optional claim 画面で、"Token type" の下のAccess をクリックします。
- Claim カラムの下のupn を選択します。
- 下部の追加をクリックします。
- トークンにクレームが表示されるために必要な、Turn on the Microsoft Graph profile permission を選択します。
- 追加をクリックします。
- このプロセスをクライアントアプリでも繰り返します。
- 再度接続を試みてください。
接続オブジェクトの作成
Connect-Redshift cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-Redshift -User 'admin' -Password 'admin' -Server 'examplecluster.my.us-west-2.redshift.amazonaws.com' -Port '5439' -Database 'dev'
データの取得
接続の作成が完了したら、リレーショナルデータベースに対して通常行える操作を
別のcmdlet を使って実行できます。 Select-Redshift cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-Redshift -Connection $conn -Table ""sales_db"."public".Orders" -Columns @("ShipName, ShipCity") -Where "ShipCountry='USA'"
Invoke-Redshift cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-Redshift -Connection $conn -Table "sales_db"."public".Orders -Where "ShipCountry = 'USA'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\my"sales_db"."public".OrdersData.csv -NoTypeInformation
Select-Redshift からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-Redshift -User 'admin' -Password 'admin' -Server 'examplecluster.my.us-west-2.redshift.amazonaws.com' -Port '5439' -Database 'dev'
PS C:\> $row = Select-Redshift -Connection $conn -Table ""sales_db"."public".Orders" -Columns (ShipName, ShipCity) -Where "ShipCountry = 'USA'" | select -first 1
PS C:\> $row | ConvertTo-Json
{
"Connection": {
},
"Table": ""sales_db"."public".Orders",
"Columns": [
],
"ShipName": "MyShipName",
"ShipCity": "MyShipCity"
}
データの削除
以下は、抽出条件に合うあらゆるレコードを削除します。
Select-Redshift -Connection $conn -Table "sales_db"."public".Orders -Where "ShipCountry = 'USA'" | Remove-Redshift
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをAmazon Redshift にロードします。
Import-Csv -Path C:\My"sales_db"."public".OrdersUpdates.csv | %{
$record = Select-Redshift -Connection $conn -Table "sales_db"."public".Orders -Where ("Id = `'"+$_.Id+"`'")
if($record){
Update-Redshift -Connection $conn -Table "sales_db"."public".Orders -Columns @("ShipName","ShipCity") -Values @($_.ShipName, $_.ShipCity) -Where "Id = `'$_.Id`'"
}else{
Add-Redshift -Connection $conn -Table "sales_db"."public".Orders -Columns @("ShipName","ShipCity") -Values @($_.ShipName, $_.ShipCity)
}
}