Establishing a Connection
With the CData Cmdlets users can install a data module, set the connection properties, and start scripting. This section provides examples of using our Cassandra Cmdlets with native PowerShell cmdlets, like the CSV import and export cmdlets.
Installing and Connecting
If you have PSGet, installing the cmdlets can be accomplished from the PowerShell Gallery with the following command. You can also obtain a setup from the CData site.
Install-Module CassandraCmdlets
The following line is then added to your profile, loading the cmdlets on the next session:
Import-Module CassandraCmdlets;
You can then use the Connect-Cassandra cmdlet to create a connection object that can be passed to other cmdlets:
$conn = Connect-Cassandra -Database 'MyCassandraDB' -Port 9042 -Server '127.0.0.1'
Connecting to Cassandra
You can connect directly to Cassandra instances, as well as Cosmos DB and DataStax Astra DB via their Cassandra APIs.
Cassandra
Set the following to connect to a Cassandra instance:
- Server: Set this to the the host name or IP address of the server hosting the Cassandra database. You can specify the port at the end of this property or in Port.
- Port: Set this to the port on which the Cassandra database is hosted, if you haven't specified the port as part of the Server connection property.
- Database: Set this to the name of the Cassandra keyspace containing your tables.
- ConsistencyLevel: Set this to the number of the replicas that you want to enforce a response from before queries are considered a success.
- User: Set this to the username used to access your Cassandra database.
- Password: Set this to the password used to access your Cassandra database.
Cosmos DB
If you're using Cosmos DB as your Cassandra data store, specify the following values to connect:- Server: Set this to the Host value, the FQDN of the server provisioned for your account. You can specify the port at the end of this property or in Port.
- Port: Set this to the port on which your Cosmos DB instance is hosted, if you haven't specified the port as part of the Server connection property.
- Database: Set this to the database you want to read from and write to.
- ConsistencyLevel: Set this to the number of the replicas that you want to enforce a response from before queries are considered a success.
- User: Set this to your Cosmos DB account name.
- Password: Set this to the account key associated with the Cosmos DB account.
DataStax Astra DB
If you're using Astra DB as your Cassandra data store, specify the following values to connect:
- Server: Set this to the server in your BASE_ADDRESS value. You can also specify the port here or in Port.
- Port: Set this to the port on which your Astra DB instance is hosted, if you haven't specified the port as part of the Server connection property.
- Database: Set this to the database you want to read from and write to.
- ConsistencyLevel: Set this to the number of the replicas that you want to enforce a response from before queries are considered a success.
- User: Set this to your Astra DB username.
- Password: Set this to the password associated with your Astra DB username.
Secure Bundle Connection
You can configure any connection as a secure bundle by setting the following connection properties:- Server: Set this to your server name.
- Port: Set this to 29042.
- User: Set this to the Atra DB user.
- Password: Set this to Astra DB user password.
- SSLClientCert: Set this to the path to the identity.jks file.
- SSLClientCertType: Set this JKSFILE.
- SSLClientCertPassword: Set this to the password for the identity.jks file.
- SSLClientCertSubject: Set this to CERTIFICATE SUBJECT INFORMATION.
- UseSSL: Set this to "true".
See Secure connect bundle contents for a list of files that are included in a secure bundle.
Authenticating to Cassandra
The cmdlet supports Basic authentication with login credentials and the additional authentication features of DataStax Enterprise (DSE). The following sections detail connection properties your authentication method may require.You need to set AuthScheme to the value corresponding to the authenticator configured for your system. You specify the authenticator in the authenticator property in the cassandra.yaml file. This file is typically found in /etc/dse/cassandra or through the DSE Unified Authenticator on DSE Cassandra.
Basic
Set AuthScheme to Basic to authenticate with login credentials alone.
In the cassandra.yaml file, set the authenticator property to "PasswordAuthenticator".
DSE
Set the AuthScheme property to DSE to authenticate with login credentials and the DSE Unified Authenticator.
In the file, set the authenticator property to "com.datastax.bdp.cassandra.auth.DseAuthenticator".
Kerberos
Set the following to authenticating using Kerberos:
- AuthScheme: Set this to KERBEROS.
- KerberosKDC: Set this to the Kerberos Key Distribution Center (KDC) service used to authenticate the user.
- KerberosRealm: Set this to the Kerberos Realm used to authenticate the user.
- KerberosSPN: Set this to the service principal name (SPN) for the Kerberos Domain Controller.
- In the cassandra.yaml file, set the authenticator property to "com.datastax.bdp.cassandra.auth.DseAuthenticator".
- Modify the authentication_options section in the dse.yaml file, specifying the default_schema and other_schemas properties as "kerberos".
- Modify the kerberos_options section in the dse.yaml file, specifying the keytab, service_principle, http_principle and qop properties.
Please see Using Kerberos for more details on how to set connection properties in order to connect to Kerberos.
LDAP
Set the following to authenticate:
- AuthScheme: Set this to LDAP to authenticate an LDAP user.
- LDAPServer: Set this to the host name or IP address of the LDAP server.
- LDAPPassword: The password of the default LDAP user.
- In the cassandra.yaml file, set the authenticator property to "com.datastax.bdp.cassandra.auth.DseAuthenticator".
- Modify the authentication_options section in the dse.yaml file, specifying the default_schema and other_schemas properties as "ldap".
- Modify the ldap_options section in the dse.yaml file, specifying the server_host, server_port, search_dn, search_password, user_search_base, and user_search_filter properties.
Securing Cassandra Connections
You can set UseSSL to negotiate SSL/TLS encryption when you connect. By default, the cmdlet attempts to negotiate SSL/TLS by checking the server's certificate against the system's trusted certificate store. To specify another certificate, see the SSLServerCert property for the available formats.
Retrieving Data
The Select-Cassandra cmdlet provides a native PowerShell interface for retrieving data:
$results = Select-Cassandra -Connection $conn -Table ""CData"."Sample".Products" -Columns @("Id, Name") -Where "Industry='Floppy Disks'"The Invoke-Cassandra cmdlet provides an SQL interface. This cmdlet can be used to execute an SQL query via the Query parameter.
Piping Cmdlet Output
The cmdlets return row objects to the pipeline one row at a time. The following line exports results to a CSV file:
Select-Cassandra -Connection $conn -Table "CData"."Sample".Products -Where "Industry = 'Floppy Disks'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\my"CData"."Sample".ProductsData.csv -NoTypeInformation
You will notice that we piped the results from Select-Cassandra into a Select-Object cmdlet and excluded some properties before piping them into an Export-CSV cmdlet. We do this because the CData Cmdlets append Connection, Table, and Columns information onto each row object in the result set, and we do not necessarily want that information in our CSV file.
However, this makes it easy to pipe the output of one cmdlet to another. The following is an example of converting a result set to JSON:
PS C:\> $conn = Connect-Cassandra -Database 'MyCassandraDB' -Port 9042 -Server '127.0.0.1' PS C:\> $row = Select-Cassandra -Connection $conn -Table ""CData"."Sample".Products" -Columns (Id, Name) -Where "Industry = 'Floppy Disks'" | select -first 1 PS C:\> $row | ConvertTo-Json { "Connection": { }, "Table": ""CData"."Sample".Products", "Columns": [ ], "Id": "MyId", "Name": "MyName" }
Deleting Data
The following line deletes any records that match the criteria:
Select-Cassandra -Connection $conn -Table "CData"."Sample".Products -Where "Industry = 'Floppy Disks'" | Remove-Cassandra
Modifying Data
The cmdlets make data transformation easy as well as data cleansing. The following example loads data from a CSV file into Cassandra, checking first whether a record already exists and needs to be updated instead of inserted.
Import-Csv -Path C:\My"CData"."Sample".ProductsUpdates.csv | %{ $record = Select-Cassandra -Connection $conn -Table "CData"."Sample".Products -Where ("Id = `'"+$_.Id+"`'") if($record){ Update-Cassandra -Connection $conn -Table "CData"."Sample".Products -Columns @("Id","Name") -Values @($_.Id, $_.Name) -Where "Id = `'$_.Id`'" }else{ Add-Cassandra -Connection $conn -Table "CData"."Sample".Products -Columns @("Id","Name") -Values @($_.Id, $_.Name) } }