S3 Compatible Storage
This page shows how to connect to object storages that support the S3 interface, e.g., STACKIT and MinIO. The setup in Xtract Universal.iQ consists of 3 main steps:
Tip
To connect to an Amazon S3 storage, it is recommended to use the dedicated Amazon S3 destination. The Amazon S3 destination supports more connection and authentication options.
Connect to S3 Compatible Storages
To create a connection to a storage:
- Open the Connections menu.
- Click [Add Connection].
- Enter a name in the Connection Name field.
- Select S3 Compatible Storage from the Connection Type dropdown. The corresponding settings open.
- Fill out the connection settings.
- Click [Test Connection] to validate the connection parameters. A status message opens in the bottom right corner of the window.
- If the connection is successful, click [Save].
The connection is now listed in the Connections menu and can be assigned to services.
Next, assign the destination to a service.
Assign S3 Compatible Storage to a Service
To assign the S3 Compatible Storage destination to a service:
- Open the Services menu.
- Select one or more services.
- Click [ Edit].
- Select an existing S3 Compatible Storage connection from the Destination dropdown.
- Click [Save].
When running the service, the results are written to the S3 bucket specified in the connection.
Next, check if the service-specific destination settings match your needs.
Connection Settings
Connection settings define how Xtract Universal.iQ connects to the storage. To open the connection settings:
- Open the Connections menu.
- Select a connection of type S3 Compatible Storage.
- Click [ Edit].
The connection settings of the S3 Compatible Storage connection open and can be modified.
System
The System section contains settings that define the S3 compatible object storage to connect to.
Endpoint
Enter the endpoint URL of the storage you want to connect to. Examples:
- AWS:
https://s3.us-east-1.amazonaws.com - MinIO:
http://example.com:9000 - STACKIT
https://object.storage.eu01.onstackit.cloud
Authentication
The Authentication section contains settings that define how to connect to S3 compatible storages. Xtract Universal.iQ uses Access Keys (an access key ID and secret access key) to authenticate with storages.
Access Key
The access key ID is a 20-character, alphanumeric string, e.g., AKIAIOSFODNN7EXAMPLE.
Secret Key
The secret access key is a 40-character string, e.g., wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY. Note that secret keys are shown only once at creation time. Make sure to copy them and store them in a safe location.
Bucket
The Bucket section contains settings that define which bucket to connect to.
Bucket
Enter the name of a bucket inside your storage. The SAP data is written into the bucket.
Test Connection
Click [Text Connection] to validate the connection to your bucket. A status message is displayed at the bottom right corner of the screen.
File Format
The File Format section defines the format of the output file written to the Amazon S3 bucket.
File Type
Select one of the following file formats used for the service output:
- CSV
- JSON
- Parquet
Compatibility mode
For Parquet files, a compatibility mode can be selected to ensure compatibility with different processing engines, such as Spark or Hadoop. The following compatibility modes are available:
- Pure: standard parquet format
-
Spark: ensures compatibility with Apache Spark by using different data types than the standard parquet format:
SAP Pure / BigQuery Spark INT1 UINT_8 INT16 TIMS TIME_MILLIS UTF8 -
BigQuery: ensures compatibility with with Google BigQuery by formatting the columns names, see BigQuery Documentation: Column Names.
Note
If an SAP Table contains a 6-character time field of type TIMS (format HHMMSS for hours, minutes and seconds), make sure to use the compatibility mode Spark to ensure compatibility with Microsoft.
CSV Settings
The CSV Settings section is only available for the CSV file type. The settings define the format of the output file written to the bucket.
Column Separator
Defines how two columns in CSV are separated. Typical column separators:
,(comma separator);(semicolon separator)\t(tab separator)
Row Separator
Defines how two rows in CSV are separated. Typical row separators:
\r\n(carriage return + line feed)\n(line feed)\r(carriage return)
Quote Symbol
Defines which character is used to encase field data. A sequence of characters may be used as the quote symbol. Quotation is applied in these scenarios:
- The column separator is part of the field data.
- The quote symbol is part of the field data.
- The row separator is part of the field data.
- The escape character is part of the field data.
Escape Character
When the escape character is part of the field data, the respective field containing this character is encased by the Quote symbol. The default escape character is the backslash \. The field may remain empty.
Column Names in First Row
Defines if the first row contains the column names. This option is set by default.
Row Separator After Last Row
Defines if the last row contains a row separator. This option is set by default.
Decimal Separator
Defines the decimal separator of decimal number for the output. Dot (.) is the default value.
Date Format
Defines a customized date format (e.g. YYYY-MM-DD or MM/DD/YYYY) for converting valid SAP dates (YYYYMMDD). Default is YYYY-MM-DD.
Time Format
Defines a customized time format (e.g. HH-MM-SS or HH:MM:SS) for converting valid SAP times (HHMMSS). Default is HH:MM:SS.
Misc
Additional connection settings for S3 Compatible Storage. All settings in Misc are optional.
Use Legacy URL Style
When enabled, the connection uses the legacy path-style S3 URL format, e.g., https://storage.example.com/my-bucket/, instead of the modern virtual-hosted-style format, e.g., https://my-bucket.storage.example.com/. Enable this option for storage systems that do not support virtual-hosted-style URLs or require path-style access for compatibility.
Folder Path
Creates a folder structure within the bucket.
- Create a single folder by entering a folder name without slashes:
[folder] - Create subfolders using the following syntax:
[folder]/[subfolder_1]/[subfolder_2]/[..]
Note
The specified folder path applies to all extractions. To define a folder path for single services, use the Folder option in the Destination Settings.
Destination Settings
Destination settings define how and where a service saves its output data, such as the target folder and filename.
To open the destination settings:
- Open the Services menu.
- Select a service that uses the S3 Compatible Storage connection.
- Click [ Edit]. The service settings open.
- Open the tab Destination Settings.
The destination settings for S3 Compatible Storage are open and can be modified.
File Name
Determines the name of the target table. The following options are available:
| Option | Description |
|---|---|
| Same as service name | Adopt the name of the service. |
| Custom | Define a name of your choice in the Custom File Name input field. |
Append timestamp
Adds a timestamp in the format _YYYY_MM_DD to the filename of the service.
Note
If the name of the object does not begin with a letter, it will be prefixed with an ‘x’, e.g. an object by the name _namespace_tabname.csv will be renamed x_namespace_tabname.csv when uploaded to the destination. This is to ensure that all uploaded objects are compatible with Azure Data Factory, Hadoop and Spark, which require object names to begin with a letter or give special meaning to objects whose names start with certain non-alphabetic characters.
Column Name Format
Defines the format of the column name. The following options are available:
| Option | Description |
|---|---|
| Code | The SAP technical column name is used as column name in the destination e.g., MAKTX. |
| PrefixedCode | The SAP technical column name is prefixed by SAP object name and the tilde character e.g., MAKT~MAKTX |
| CodeAndText | The SAP technical column name and the SAP description separated by an underscore are used as column name in the destination e.g., MAKTX_Material Description (Short Text). |
| TextAndCode | The SAP description and the SAP technical column name description separated by an underscore are used as column name in the destination e.g., Material Description (Short Text)_MAKTX. |
| Text | The SAP description is used as column name in the destination e.g., Material Description (Short Text). |
File Settings
File Splitting
Writes extraction data of a single extraction to multiple files. Each filename is appended by _part[nnn].
Max. File Size (in MB)
Defines the maximum size of each splitted file.
Note
The option Max. File Size does not apply to gzip files. The size of a gzipped file cannot be determined in advance.
GZip Compression
When enabled, the data is transferred compressed and stored as a gz file.
Custom Directory
Writes the extracted data to a specific folder structure within the bucket. If the specified folder does not exist, it is created.
- Create a single folder by entering a folder name without slashes:
folder - Create subfolders using the following syntax:
folder/subfolder_1/subfolder_2/...
Note
The specified folder path only applies to the selected service. To define a folder path for all extractions, use the Folder path option in the Connection Settings.
Script Expressions for Dynamic Folder Paths
Script expressions can be used to generate a dynamic folder path. This allows generating folder paths that are composed of service properties, e.g., service name, SAP source object. The described scenario supports script expressions based on .NET and the following custom script expressions:
| Input | Description |
|---|---|
#{Source.Name}# | Name of the SAP source. |
#{Extraction.ExtractionName}# | Name of the service. |
#{Extraction.Type}# | Service type (Table, Report, BAPI, etc.). |
#{Extraction.SapObjectName}# | Name of the SAP object that the service is extracting data from. |
#{Extraction.Timestamp}# | Timestamp of the service. |
#{Extraction.SapObjectName.TrimStart("/".ToCharArray())}# | Removes the first slash '/' of an SAP object. Example: /BIO/TMATERIAL to BIO/TMATERIAL - prevents creating an empty folder in a file path. |
#{Extraction.SapObjectName.Replace('/', '_')}# | Replaces all slashes '/' of an SAP object. Example: /BIO/TMATERIAL to _BIO_TMATERIAL - prevents splitting the SAP object name by folders in a file path. |
#{TableExtraction.WhereClause}# | Only for Table services: returns the WHERE clause of the service. |
Create files for empty data sets
When active, empty result sets create an empty file in the target environment. Deactivate this option to not create empty files.
Date Conversion
Convert SAP Dates
Converts the SAP date format (YYYYMMDD) to a regular date format (YYYY-MM-DD), e.g., 19900101 becomes 1990-01-01. Target data uses a real date data-type and not the string data-type to store dates.
Replace SAP Dates 0000XXXX with
Converts the SAP date 00000000 to the entered value.
Replace SAP Dates 9999XXXX with
Converts the SAP date 9999XXXX to the entered value.
Replace Invalid SAP Dates with
If an SAP date cannot be converted to a valid date format, the invalid date is converted to the entered value. NULL is supported as a value. When converting the SAP date the two special cases 00000000 and 9999XXXX are checked first.