Insert Records from File(s)

Reads from one or more files located on the server and inserts the data into a new or existing table.

For delimited text files, there are two loading schemes: positional and name-based. The name-based loading scheme is enabled when the file has a header present and text_has_header is set to true. In this scheme, the source file(s) field names must match the target table's column names exactly; however, the source file can have more fields than the target table has columns. If error_handling is set to permissive, the source file can have fewer fields than the target table has columns. If the name-based loading scheme is being used, names matching the file header's names may be provided to columns_to_load instead of numbers, but ranges are not supported.

Returns once all files are processed.

Input Parameter Description

NameTypeDescription
table_namestringName of the table into which the data will be inserted, in [schema_name.]table_name format, using standard name resolution rules. If the table does not exist, the table will be created using either an existing type_id or the type inferred from the file, and the new table name will have to meet standard table naming criteria.
filepathsarray of stringsAbsolute or relative filepath(s) from where files will be loaded. Relative filepaths are relative to the defined external_files_directory parameter in the server configuration. The filepaths may include wildcards (*). If the first path ends in .tsv, the text delimiter will be defaulted to a tab character. If the first path ends in .psv, the text delimiter will be defaulted to a pipe character (|).
modify_columnsmap of string to maps of string to stringsNot implemented yet. The default value is an empty map ( {} ).
create_table_optionsmap of string to strings

Options used when creating the target table. The default value is an empty map ( {} ).

Supported Parameters (keys)Parameter Description
type_idID of a currently registered type. The default value is ''.
no_error_if_exists

If true, prevents an error from occurring if the table already exists and is of the given type. If a table with the same ID but a different type exists, it is still an error. The default value is false. The supported values are:

  • true
  • false
is_replicated

Affects the distribution scheme for the table's data. If true and the given type has no explicit shard key defined, the table will be replicated. If false, the table will be sharded according to the shard key specified in the given type_id, or randomly sharded, if no shard key is specified. Note that a type containing a shard key cannot be used to create a replicated table. The default value is false. The supported values are:

  • true
  • false
foreign_keysSemicolon-separated list of foreign keys, of the format '(source_column_name [, ...]) references target_table_name(primary_key_column_name [, ...]) [as foreign_key_name]'.
foreign_shard_keyForeign shard key of the format 'source_column references shard_by_column from target_table(primary_key_column)'.
partition_type

Partitioning scheme to use.

Supported ValuesDescription
RANGEUse range partitioning.
INTERVALUse interval partitioning.
LISTUse list partitioning.
HASHUse hash partitioning.
partition_keysComma-separated list of partition keys, which are the columns or column expressions by which records will be assigned to partitions defined by partition_definitions.
partition_definitionsComma-separated list of partition definitions, whose format depends on the choice of partition_type. See range partitioning, interval partitioning, list partitioning, or hash partitioning for example formats.
is_automatic_partition

If true, a new partition will be created for values which don't fall into an existing partition. Currently only supported for list partitions. The default value is false. The supported values are:

  • true
  • false
ttlSets the TTL of the table specified in input parameter table_name.
chunk_sizeIndicates the number of records per chunk to be used for this table.
is_result_table

Indicates whether the table is a memory-only table. A result table cannot contain columns with store_only or text_search data-handling or that are non-charN strings, and it will not be retained if the server is restarted. The default value is false. The supported values are:

  • true
  • false
strategy_definitionThe tier strategy for the table and its columns. See tier strategy usage for format and tier strategy examples for examples.
optionsmap of string to strings

Optional parameters. The default value is an empty map ( {} ).

Supported Parameters (keys)Parameter Description
bad_record_table_nameOptional name of a table to which records that were rejected are written. The bad-record-table has the following columns: line_number (long), line_rejected (string), error_message (string).
bad_record_table_limitA positive integer indicating the maximum number of records that can be written to the bad-record-table. Default value is 10000
batch_sizeInternal tuning parameter--number of records per batch when inserting data.
column_formatsFor each target column specified, applies the column-property-bound format to the source data loaded into that column. Each column format will contain a mapping of one or more of its column properties to an appropriate format for each property. Currently supported column properties include date, time, & datetime. The parameter value must be formatted as a JSON string of maps of column names to maps of column properties to their corresponding column formats, e.g., '{ "order_date" : { "date" : "%Y.%m.%d" }, "order_time" : { "time" : "%H:%M:%S" } }'. See default_column_formats for valid format syntax.
columns_to_loadSpecifies a comma-delimited list of columns from the source data to load. If more than one file is being loaded, this list applies to all files. Column numbers can be specified discretely or as a range. For example, a value of '5,7,1..3' will insert values from the fifth column in the source data into the first column in the target table, from the seventh column in the source data into the second column in the target table, and from the first through third columns in the source data into the third through fifth columns in the target table. If the source data contains a header, column names matching the file header names may be provided instead of column numbers. If the target table doesn't exist, the table will be created with the columns in this order. If the target table does exist with columns in a different order than the source data, this list can be used to match the order of the target table. For example, a value of 'C, B, A' will create a three column table with column C, followed by column B, followed by column A; or will insert those fields in that order into a table created with columns in that order. If the target table exists, the column names must match the source data field names for a name-mapping to be successful.
columns_to_skipSpecifies a comma-delimited list of columns from the source data to skip. Mutually exclusive to columns_to_load.
datasource_nameName of an existing external data source from which data file(s) specified in input parameter filepaths will be loaded
default_column_formatsSpecifies the default format to be applied to source data loaded into columns with the corresponding column property. Currently supported column properties include date, time, & datetime. This default column-property-bound format can be overridden by specifying a column property & format for a given target column in column_formats. For each specified annotation, the format will apply to all columns with that annotation unless a custom column_formats for that annotation is specified. The parameter value must be formatted as a JSON string that is a map of column properties to their respective column formats, e.g., '{ "date" : "%Y.%m.%d", "time" : "%H:%M:%S" }'. Column formats are specified as a string of control characters and plain text. The supported control characters are 'Y', 'm', 'd', 'H', 'M', 'S', and 's', which follow the Linux 'strptime()' specification, as well as 's', which specifies seconds and fractional seconds (though the fractional component will be truncated past milliseconds). Formats for the 'date' annotation must include the 'Y', 'm', and 'd' control characters. Formats for the 'time' annotation must include the 'H', 'M', and either 'S' or 's' (but not both) control characters. Formats for the 'datetime' annotation meet both the 'date' and 'time' control character requirements. For example, '{"datetime" : "%m/%d/%Y %H:%M:%S" }' would be used to interpret text as "05/04/2000 12:12:11"
error_handling

Specifies how errors should be handled upon insertion. The default value is permissive.

Supported ValuesDescription
permissiveRecords with missing columns are populated with nulls if possible; otherwise, the malformed records are skipped.
ignore_bad_recordsMalformed records are skipped.
abortStops current insertion and aborts entire operation when an error is encountered. Primary key collisions are considered abortable errors in this mode.
file_type

Specifies the type of the file(s) whose records will be inserted. The default value is delimited_text.

Supported ValuesDescription
delimited_textDelimited text file format; e.g., CSV, TSV, PSV, etc.
parquetApache Parquet file format
jsonJson file format
ingestion_mode

Whether to do a full load, dry run, or perform a type inference on the source data. The default value is full.

Supported ValuesDescription
fullRun a type inference on the source data (if needed) and ingest
dry_runDoes not load data, but walks through the source data and determines the number of valid records, taking into account the current mode of error_handling.
type_inference_onlyInfer the type of the source data and return, without ingesting any data. The inferred type is returned in the response.
loading_mode

Scheme for distributing the extraction and loading of data from the source data file(s). The default value is head.

Supported ValuesDescription
headThe head node loads all data. All files must be available to the head node.
distributed_sharedThe head node coordinates loading data by worker processes across all nodes from shared files available to all workers. NOTE: Instead of existing on a shared source, the files can be duplicated on a source local to each host to improve performance, though the files must appear as the same data set from the perspective of all hosts performing the load.
distributed_localA single worker process on each node loads all files that are available to it. This option works best when each worker loads files from its own file system, to maximize performance. In order to avoid data duplication, either each worker performing the load needs to have visibility to a set of files unique to it (no file is visible to more than one node) or the target table needs to have a primary key (which will allow the worker to automatically deduplicate data). NOTE: If the target table doesn't exist, the table structure will be determined by the head node. If the head node has no files local to it, it will be unable to determine the structure and the request will fail. This mode should not be used in conjuction with a data source, as data sources are seen by all worker processes as shared resources with no 'local' component. If the head node is configured to have no worker processes, no data strictly accessible to the head node will be loaded.
primary_keysOptional: comma separated list of column names, to set as primary keys, when not specified in the type. The default value is ''.
shard_keysOptional: comma separated list of column names, to set as primary keys, when not specified in the type. The default value is ''.
text_comment_stringSpecifies the character string that should be interpreted as a comment line prefix in the source data. All lines in the data starting with the provided string are ignored. For delimited_text file_type only. The default value is '#'.
text_delimiterSpecifies the character delimiting field values in the source data and field names in the header (if present). For delimited_text file_type only. The default value is ','.
text_escape_characterSpecifies the character that is used to escape other characters in the source data. An 'a', 'b', 'f', 'n', 'r', 't', or 'v' preceded by an escape character will be interpreted as the ASCII bell, backspace, form feed, line feed, carriage return, horizontal tab, & vertical tab, respectively. For example, the escape character followed by an 'n' will be interpreted as a newline within a field value. The escape character can also be used to escape the quoting character, and will be treated as an escape character whether it is within a quoted field value or not. For delimited_text file_type only.
text_has_header

Indicates whether the source data contains a header row. For delimited_text file_type only. The default value is true. The supported values are:

  • true
  • false
text_header_property_delimiterSpecifies the delimiter for column properties in the header row (if present). Cannot be set to same value as text_delimiter. For delimited_text file_type only. The default value is '|'.
text_null_stringSpecifies the character string that should be interpreted as a null value in the source data. For delimited_text file_type only. The default value is ''.
text_quote_characterSpecifies the character that should be interpreted as a field value quoting character in the source data. The character must appear at beginning and end of field value to take effect. Delimiters within quoted fields are treated as literals and not delimiters. Within a quoted field, two consecutive quote characters will be interpreted as a single literal quote character, effectively escaping it. To not have a quote character, specify an empty string. For delimited_text file_type only. The default value is '"'.
truncate_table

If set to true, truncates the table specified by input parameter table_name prior to loading the file(s). The default value is false. The supported values are:

  • true
  • false
num_tasks_per_rankOptional: number of tasks for reading file per rank. Default will be external_file_reader_num_tasks
type_inference_mode

optimize type inference for: The default value is accuracy.

Supported ValuesDescription
accuracyscans all data to get exactly-typed & sized columns for all data present
speedpicks the widest possible column types so that 'all' values will fit with minimum data scanned

Output Parameter Description

NameTypeDescription
table_namestringValue of input parameter table_name.
type_idstringID of the currently registered table structure type for the target table
type_definitionstringA JSON string describing the columns of the target table
type_labelstringThe user-defined description associated with the target table's structure
type_propertiesmap of string to arrays of stringsA mapping of each target table column name to an array of column properties associated with that column
count_insertedlongNumber of records inserted into the target table.
count_skippedlongNumber of records skipped, when not running in abort error handling mode.
count_updatedlong[Not yet implemented] Number of records updated within the target table.
infomap of string to stringsAdditional information.
filesarray of strings