> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# create_table_external

<div className="kinetica-pydoc">
  <div className="dl py method">
    <div className="dt sig sig-object py" id="gpudb.GPUdb.create_table_external"> <span className="sig-name descname"><span className="pre">create\_table\_external</span></span><span className="sig-paren">(</span><span className="em sig-param"><span className="n"><span className="pre">table\_name</span></span><span className="o"><span className="pre">=</span></span><span className="default_value"><span className="pre">None</span></span></span>, <span className="em sig-param"><span className="n"><span className="pre">filepaths</span></span><span className="o"><span className="pre">=</span></span><span className="default_value"><span className="pre">None</span></span></span>, <span className="em sig-param"><span className="n"><span className="pre">modify\_columns</span></span><span className="o"><span className="pre">=</span></span><span className="default_value"><span className="pre">{"{"}{"}"}</span></span></span>, <span className="em sig-param"><span className="n"><span className="pre">create\_table\_options</span></span><span className="o"><span className="pre">=</span></span><span className="default_value"><span className="pre">{"{"}{"}"}</span></span></span>, <span className="em sig-param"><span className="n"><span className="pre">options</span></span><span className="o"><span className="pre">=</span></span><span className="default_value"><span className="pre">{"{"}{"}"}</span></span></span><span className="sig-paren">)</span><a href="https://github.com/kineticadb/kinetica-api-python/blob/master/gpudb/gpudb.py#L24196"><span className="viewcode-link"><span className="pre">\[source]</span></span></a></div>

    <div className="dd">
      <p>Creates a new <a className="reference external" href="/content/concepts/external_tables/">external table</a>, which is a local database object whose source data is located externally to the database. The source data can be located either in <a className="reference external" href="/content/tools/kifs/">KiFS</a>; on the cluster, accessible to the database; or remotely, accessible via a pre-defined external <a className="reference external" href="/content/concepts/data_sources/">data source</a>.</p>
      <p>The external table can have its structure defined explicitly, via input parameter <span className="em">create\_table\_options</span>, which contains many of the options from <a className="reference internal" href="#gpudb.GPUdb.create_table" title="gpudb.GPUdb.create_table"><code className="xref py py-meth docutils literal notranslate"><span className="pre">GPUdb.create\_table()</span></code></a>; or defined implicitly, inferred from the source data.</p>
      <p><strong>Parameters</strong></p>

      <div className="blockquote">
        <div>
          <div className="dl">
            <div className="dt">table\_name (<span className="em">str</span>) –</div>

            <div className="dd">
              <p>Name of the table to be created, in \[schema\_name.]table\_name format, using standard <a className="reference external" href="/content/concepts/tables/#table-name-resolution">name resolution rules</a> and meeting <a className="reference external" href="/content/concepts/tables/#table-naming-criteria">table naming criteria</a>.</p>
            </div>

            <div className="dt">filepaths (<span className="em">list of str</span>) –</div>

            <div className="dd">
              <p>A list of file paths from which data will be sourced;</p>
              <p>For paths in <a className="reference external" href="/content/tools/kifs/">KiFS</a>, use the URI prefix of kifs\:// followed by the path to a file or directory. File matching by prefix is supported, e.g. kifs\://dir/file would match dir/file\_1 and dir/file\_2. When prefix matching is used, the path must start with a full, valid KiFS directory name.</p>
              <p>If an external data source is specified in <span className="em">datasource\_name</span>, these file paths must resolve to accessible files at that data source location. Prefix matching is supported. If the data source is hdfs, prefixes must be aligned with directories, i.e. partial file names will not match.</p>
              <p>If no data source is specified, the files are assumed to be local to the database and must all be accessible to the gpudb user, residing on the path (or relative to the path) specified by the external files directory in the Kinetica <a className="reference external" href="/content/config/#config-main-external-files">configuration file</a>. Wildcards (\*) can be used to specify a group of files. Prefix matching is supported, the prefixes must be aligned with directories.</p>
              <p>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 (|). The user can provide a single element (which will be automatically promoted to a list internally) or a list.</p>
            </div>

            <div className="dt">modify\_columns (<span className="em">dict of str to dicts of str to str</span>) –</div>

            <div className="dd">
              <p>Not implemented yet. The default value is an empty dict ( {"{"}{"}"} ).</p>
            </div>

            <div className="dt">create\_table\_options (<span className="em">dict of str to str</span>) –</div>

            <div className="dd">
              <p>Options from <a className="reference internal" href="#gpudb.GPUdb.create_table" title="gpudb.GPUdb.create_table"><code className="xref py py-meth docutils literal notranslate"><span className="pre">GPUdb.create\_table()</span></code></a>, allowing the structure of the table to be defined independently of the data source. Allowed keys are:</p>

              <ul>
                <li>
                  <p><strong>type\_id</strong> – ID of a currently registered <a className="reference external" href="/content/concepts/types/">type</a>.</p>
                </li>

                <li>
                  <p><strong>no\_error\_if\_exists</strong> – If <span className="em">true</span>, prevents an error from occurring if the table already exists and is of the given type. If a table with the same name but a different type exists, it is still an error. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>is\_replicated</strong> – Affects the <a className="reference external" href="/content/concepts/tables/#distribution">distribution scheme</a> for the table’s data. If <span className="em">true</span> and the given table has no explicit <a className="reference external" href="/content/concepts/tables/#shard-key">shard key</a> defined, the table will be <a className="reference external" href="/content/concepts/tables/#replication">replicated</a>. If <span className="em">false</span>, the table will be <a className="reference external" href="/content/concepts/tables/#sharding">sharded</a> according to the shard key specified in the given <span className="em">type\_id</span>, or <a className="reference external" href="/content/concepts/tables/#random-sharding">randomly sharded</a>, if no shard key is specified. Note that a type containing a shard key cannot be used to create a replicated table. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>foreign\_keys</strong> – Semicolon-separated list of <a className="reference external" href="/content/concepts/tables/#foreign-keys">foreign keys</a>, of the format ‘(source\_column\_name \[, …]) references target\_table\_name(primary\_key\_column\_name \[, …]) \[as foreign\_key\_name]’.</p>
                </li>

                <li>
                  <p><strong>foreign\_shard\_key</strong> – Foreign shard key of the format ‘source\_column references shard\_by\_column from target\_table(primary\_key\_column)’.</p>
                </li>

                <li>
                  <p><strong>partition\_type</strong> – <a className="reference external" href="/content/concepts/tables/#partitioning">Partitioning</a> scheme to use. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>RANGE</strong> – Use <a className="reference external" href="/content/concepts/tables/#partitioning-by-range">range partitioning</a>.</p>
                    </li>

                    <li>
                      <p><strong>INTERVAL</strong> – Use <a className="reference external" href="/content/concepts/tables/#partitioning-by-interval">interval partitioning</a>.</p>
                    </li>

                    <li>
                      <p><strong>LIST</strong> – Use <a className="reference external" href="/content/concepts/tables/#partitioning-by-list">list partitioning</a>.</p>
                    </li>

                    <li>
                      <p><strong>HASH</strong> – Use <a className="reference external" href="/content/concepts/tables/#partitioning-by-hash">hash partitioning</a>.</p>
                    </li>

                    <li>
                      <p><strong>SERIES</strong> – Use <a className="reference external" href="/content/concepts/tables/#partitioning-by-series">series partitioning</a>.</p>
                    </li>
                  </ul>
                </li>

                <li>
                  <p><strong>partition\_keys</strong> – Comma-separated list of partition keys, which are the columns or column expressions by which records will be assigned to partitions defined by <span className="em">partition\_definitions</span>.</p>
                </li>

                <li>
                  <p><strong>partition\_definitions</strong> – Comma-separated list of partition definitions, whose format depends on the choice of <span className="em">partition\_type</span>. See <a className="reference external" href="/content/concepts/tables/#partitioning-by-range">range partitioning</a>, <a className="reference external" href="/content/concepts/tables/#partitioning-by-interval">interval partitioning</a>, <a className="reference external" href="/content/concepts/tables/#partitioning-by-list">list partitioning</a>, <a className="reference external" href="/content/concepts/tables/#partitioning-by-hash">hash partitioning</a>, or <a className="reference external" href="/content/concepts/tables/#partitioning-by-series">series partitioning</a> for example formats.</p>
                </li>

                <li>
                  <p><strong>is\_automatic\_partition</strong> – If <span className="em">true</span>, a new partition will be created for values which don’t fall into an existing partition. Currently, only supported for <a className="reference external" href="/content/concepts/tables/#partitioning-by-list">list partitions</a>. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>ttl</strong> – Sets the <a className="reference external" href="/content/concepts/ttl/">TTL</a> of the table specified in input parameter <span className="em">table\_name</span>.</p>
                </li>

                <li>
                  <p><strong>chunk\_size</strong> – Indicates the number of records per chunk to be used for this table.</p>
                </li>

                <li>
                  <p><strong>chunk\_column\_max\_memory</strong> – Indicates the target maximum data size for each column in a chunk to be used for this table.</p>
                </li>

                <li>
                  <p><strong>chunk\_max\_memory</strong> – Indicates the target maximum data size for all columns in a chunk to be used for this table.</p>
                </li>

                <li>
                  <p><strong>is\_result\_table</strong> – Indicates whether the table is a <a className="reference external" href="/content/concepts/tables_memory_only/">memory-only table</a>. A result table cannot contain columns with text\_search <a className="reference external" href="/content/concepts/types/#data-handling">data-handling</a>, and it will not be retained if the server is restarted. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>strategy\_definition</strong> – The <a className="reference external" href="/content/rm/concepts/#tier-strategies">tier strategy</a> for the table and its columns.</p>
                </li>

                <li>
                  <p><strong>compression\_codec</strong> – The default <a className="reference external" href="/content/concepts/column_compression/">compression codec</a> for this table’s columns.</p>
                </li>
              </ul>

              <p>The default value is an empty dict ( {"{"}{"}"} ).</p>
            </div>

            <div className="dt">options (<span className="em">dict of str to str</span>) –</div>

            <div className="dd">
              <p>Optional parameters. Allowed keys are:</p>

              <ul>
                <li>
                  <p><strong>bad\_record\_table\_name</strong> – 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). When <span className="em">error\_handling</span> is <span className="em">abort</span>, bad records table is not populated.</p>
                </li>

                <li>
                  <p><strong>bad\_record\_table\_limit</strong> – A positive integer indicating the maximum number of records that can be written to the bad-record-table. The default value is ‘10000’.</p>
                </li>

                <li>
                  <p><strong>bad\_record\_table\_limit\_per\_input</strong> – For subscriptions, a positive integer indicating the maximum number of records that can be written to the bad-record-table per file/payload. Default value will be <span className="em">bad\_record\_table\_limit</span> and total size of the table per rank is limited to <span className="em">bad\_record\_table\_limit</span>.</p>
                </li>

                <li>
                  <p><strong>batch\_size</strong> – Number of records to insert per batch when inserting data. The default value is ‘50000’.</p>
                </li>

                <li>
                  <p><strong>column\_formats</strong> – For 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, and 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” {"}"} {"}"}’.</p>
                  <p>See <span className="em">default\_column\_formats</span> for valid format syntax.</p>
                </li>

                <li>
                  <p><strong>columns\_to\_load</strong> – Specifies a comma-delimited list of source-data columns that supply the target table’s columns. If more than one file is being loaded, this list applies to all files.</p>
                  <p>Mutually exclusive with <span className="em">columns\_to\_skip</span>.</p>
                  <p>This list is a positional mapping onto the target table rather than a filter: the i-th entry identifies the source column that feeds the i-th column of the target table.</p>
                  <p>Entries may be column numbers, column names, or empty.</p>
                  <p>Column numbers are 1-based, specified discretely or as a range. For example, ‘5,7,,1..3’ inserts the fifth source column into the first target column, the seventh into the second, null into the third, and the first through third into the fourth through sixth. A range may descend (‘3..1’) to reverse that group’s order. Zero is not a valid column number. Numbers are supported only for delimited-text and Avro sources.</p>
                  <p>Column names are strings, matching the source-data field names – either the file’s header names or the names supplied by <span className="em">name\_columns\_from\_file</span>. Requires that the source data have column names. Names are matched case-sensitively, and a name not present in the source will fail.</p>
                  <p>An empty entry, acting as a placeholder meaning that no source column feeds the corresponding target column.</p>
                  <p>Numbers and names cannot be mixed: a single non-numeric entry causes the entire list to be interpreted as names.</p>
                  <p>If the external table has no column definition, it is created with these columns in this order, and the list may name any subset of the source columns.</p>
                  <p>If the external table has a column definition, the number of entries must equal the table’s column count. Use empty entries to pad the list to the table’s width. Because the mapping is positional, this option can also reorder source columns into the table’s column order – for example ‘C, B, A’ for an external table whose columns are C, B, A.</p>
                  <p>Note: specifying <span className="em">columns\_to\_load</span> disables server-side population of target columns that no source column feeds. Such columns receive NULL instead of their default value, ‘init\_with\_now’, or ‘init\_with\_uuid’ value; if the column is non-nullable, the record is rejected. To have unfed target columns take their defaults, omit <span className="em">columns\_to\_load</span> and rely on name-based matching, optionally with <span className="em">columns\_to\_skip</span>.</p>
                </li>

                <li>
                  <p><strong>columns\_to\_skip</strong> – Specifies a comma-delimited list of source-data columns to exclude from the load. If more than one file is being loaded, this list applies to all files.</p>
                  <p>Mutually exclusive with <span className="em">columns\_to\_load</span>.</p>
                  <p>Entries may be column names matching the source-data field names (the file’s header names, or the names supplied by <span className="em">name\_columns\_from\_file</span>, matched case-sensitively), or 1-based column numbers. Numbers are supported only for delimited-text sources. Name-based entries require the source data to have column names.</p>
                  <p>If the external table has no column definition, the non-excluded source columns define the external table’s columns, in source-data order.</p>
                  <p>If the external table has a column definition, the non-excluded source columns are matched to its columns by name, case-insensitively — unlike <span className="em">columns\_to\_load</span>, this option does not change how that matching is done. The order and number of source columns therefore need not correspond to the external table’s columns, and source columns matching none of them need not be listed; they are ignored.</p>
                  <p>Excluding a source column that corresponds to a target table column causes that target column to be populated from its default value, ‘init\_with\_\*’ property, or null. This makes <span className="em">columns\_to\_skip</span> the means of preferring a target column’s default over a value present in the source data.</p>
                  <p>If the external table has a column definition and the source data has no column names (no header row and no <span className="em">name\_columns\_from\_file</span>), the non-excluded source columns are matched to its columns by position rather than by name; the source column count must then equal the external table’s column count plus the number of columns skipped.</p>
                </li>

                <li>
                  <p><strong>compression\_type</strong> – Source data compression type. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>none</strong> – No compression.</p>
                    </li>

                    <li>
                      <p><strong>auto</strong> – Auto detect compression type.</p>
                    </li>

                    <li>
                      <p><strong>gzip</strong> – gzip file compression.</p>
                    </li>

                    <li>
                      <p><strong>bzip2</strong> – bzip2 file compression.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘auto’.</p>
                </li>

                <li>
                  <p><strong>datasource\_name</strong> – Name of an existing external data source from which data file(s) specified in input parameter <span className="em">filepaths</span> will be loaded.</p>
                </li>

                <li>
                  <p><strong>default\_column\_formats</strong> – Specifies the default format to be applied to source data loaded into columns with the corresponding column property. Currently supported column properties include date, time, and datetime. This default column-property-bound format can be overridden by specifying a column property and format for a given target column in <span className="em">column\_formats</span>. For each specified annotation, the format will apply to all columns with that annotation unless a custom <span className="em">column\_formats</span> for that annotation is specified.</p>
                  <p>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).</p>
                  <p>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”.</p>
                </li>

                <li>
                  <p><strong>datalake\_catalog</strong> – Name of an existing datalake(iceberg) catalog used in loading files.</p>
                </li>

                <li>
                  <p><strong>datalake\_path</strong> – Path of datalake(iceberg) object.</p>
                </li>

                <li>
                  <p><strong>datalake\_snapshot</strong> – Snapshot ID of datalake(iceberg) object.</p>
                </li>

                <li>
                  <p><strong>error\_handling</strong> – Specifies how errors should be handled upon insertion. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>permissive</strong> – Records with missing columns are populated with nulls if possible; otherwise, the malformed records are skipped.</p>
                    </li>

                    <li>
                      <p><strong>skip</strong> – Malformed records are skipped.</p>
                    </li>

                    <li>
                      <p><strong>ignore\_bad\_records</strong> – Deprecated. Alias for <span className="em">skip</span>.</p>
                    </li>

                    <li>
                      <p><strong>abort</strong> – Stops current insertion and aborts entire operation when an error is encountered. Primary key collisions are considered abortable errors in this mode.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘abort’.</p>
                </li>

                <li>
                  <p><strong>external\_table\_type</strong> – Specifies whether the external table holds a local copy of the external data. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>materialized</strong> – Loads a copy of the external data into the database, refreshed on demand.</p>
                    </li>

                    <li>
                      <p><strong>logical</strong> – External data will not be loaded into the database; the data will be retrieved from the source upon servicing each query against the external table.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘materialized’.</p>
                </li>

                <li>
                  <p><strong>file\_type</strong> – Specifies the type of the file(s) whose records will be inserted. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>avro</strong> – Avro file format.</p>
                    </li>

                    <li>
                      <p><strong>delimited\_text</strong> – Delimited text file format; e.g., CSV, TSV, PSV, etc.</p>
                    </li>

                    <li>
                      <p><strong>gdb</strong> – Esri/GDB file format.</p>
                    </li>

                    <li>
                      <p><strong>json</strong> – JSON file format.</p>
                    </li>

                    <li>
                      <p><strong>parquet</strong> – Apache Parquet file format.</p>
                    </li>

                    <li>
                      <p><strong>shapefile</strong> – ShapeFile file format.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘delimited\_text’.</p>
                </li>

                <li>
                  <p><strong>flatten\_columns</strong> – Specifies how to handle nested columns. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>true</strong> – Break up nested columns to multiple columns.</p>
                    </li>

                    <li>
                      <p><strong>false</strong> – Treat nested columns as JSON columns instead of flattening.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>gdal\_configuration\_options</strong> – Comma separated list of gdal conf options, for the specific requests: key=value.</p>
                </li>

                <li>
                  <p><strong>pk\_conflict\_predicate\_higher</strong> – The record with higher value for the column resolves the primary-key insert conflict. The default value is ‘’.</p>
                </li>

                <li>
                  <p><strong>pk\_conflict\_predicate\_lower</strong> – The record with lower value for the column resolves the primary-key insert conflict. The default value is ‘’.</p>
                </li>

                <li>
                  <p><strong>ignore\_existing\_pk</strong> – Specifies the record collision error-suppression policy for inserting into a table with a <a className="reference external" href="/content/concepts/tables/#primary-keys">primary key</a>, only used when not in upsert mode (upsert mode is disabled when <span className="em">update\_on\_existing\_pk</span> is <span className="em">false</span>). If set to <span className="em">true</span>, any record being inserted that is rejected for having primary key values that match those of an existing table record will be ignored with no error generated. If <span className="em">false</span>, the rejection of any record for having primary key values matching an existing record will result in an error being reported, as determined by <span className="em">error\_handling</span>. If the specified table does not have a primary key or if upsert mode is in effect (<span className="em">update\_on\_existing\_pk</span> is <span className="em">true</span>), then this option has no effect. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>true</strong> – Ignore new records whose primary key values collide with those of existing records.</p>
                    </li>

                    <li>
                      <p><strong>false</strong> – Treat as errors any new records whose primary key values collide with those of existing records.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>ingestion\_mode</strong> – Whether to do a full load, dry run, or perform a type inference on the source data. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>full</strong> – Run a type inference on the source data (if needed) and ingest.</p>
                    </li>

                    <li>
                      <p><strong>dry\_run</strong> – Does not load data, but walks through the source data and determines the number of valid records, taking into account the current mode of <span className="em">error\_handling</span>.</p>
                    </li>

                    <li>
                      <p><strong>type\_inference\_only</strong> – Infer the type of the source data and return, without ingesting any data. The inferred type is returned in the response.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘full’.</p>
                </li>

                <li>
                  <p><strong>jdbc\_fetch\_size</strong> – The JDBC fetch size, which determines how many rows to fetch per round trip. The default value is ‘50000’.</p>
                </li>

                <li>
                  <p><strong>kafka\_consumers\_per\_rank</strong> – Number of Kafka consumer threads per rank (valid range 1-6). The default value is ‘1’.</p>
                </li>

                <li>
                  <p><strong>kafka\_group\_id</strong> – The group id to be used when consuming data from a Kafka topic (valid only for Kafka datasource subscriptions).</p>
                </li>

                <li>
                  <p><strong>kafka\_offset\_reset\_policy</strong> – Policy to determine whether the Kafka data consumption starts either at earliest offset or latest offset. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>earliest</p>
                    </li>

                    <li>
                      <p>latest</p>
                    </li>
                  </ul>

                  <p>The default value is ‘earliest’.</p>
                </li>

                <li>
                  <p><strong>kafka\_optimistic\_ingest</strong> – Enable optimistic ingestion where Kafka topic offsets and table data are committed independently to achieve parallelism. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>kafka\_subscription\_cancel\_after</strong> – Sets the Kafka subscription lifespan (in minutes). Expired subscription will be cancelled automatically.</p>
                </li>

                <li>
                  <p><strong>kafka\_type\_inference\_fetch\_timeout</strong> – Maximum time to collect Kafka messages before type inferencing on the set of them.</p>
                </li>

                <li>
                  <p><strong>layer</strong> – Geo files layer(s) name(s): comma separated.</p>
                </li>

                <li>
                  <p><strong>loading\_mode</strong> – Scheme for distributing the extraction and loading of data from the source data file(s). This option applies only when loading files that are local to the database. Allowed values are:</p>

                  <ul>
                    <li>
                      <p><strong>head</strong> – The head node loads all data. All files must be available to the head node.</p>
                    </li>

                    <li>
                      <p><strong>distributed\_shared</strong> – The head node coordinates loading data by worker processes across all nodes from shared files available to all workers.</p>
                      <p>NOTE:</p>
                      <p>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.</p>
                    </li>

                    <li>
                      <p><strong>distributed\_local</strong> – A 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).</p>
                      <p>NOTE:</p>
                      <p>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.</p>
                      <p>If the head node is configured to have no worker processes, no data strictly accessible to the head node will be loaded.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘head’.</p>
                </li>

                <li>
                  <p><strong>local\_time\_offset</strong> – Apply an offset to Avro local timestamp columns.</p>
                </li>

                <li>
                  <p><strong>max\_records\_to\_load</strong> – Limit the number of records to load in this request: if this number is larger than <span className="em">batch\_size</span>, then the number of records loaded will be limited to the next whole number of <span className="em">batch\_size</span> (per working thread).</p>
                </li>

                <li>
                  <p><strong>name\_columns\_from\_file</strong> – Specifies a comma-delimited list of column names to be used as the source-data column names. Supported for delimited-text sources only.</p>
                  <p>The i-th name in this list applies to the i-th column in the file. If the file has a header row (i.e., <span className="em">text\_has\_header</span> is <span className="em">true</span>), these names override the file’s header names. If the file has no header row, these names become the source-data column names.</p>
                  <p>Naming the source columns enables name-based matching against the target table’s columns, and permits name-based <span className="em">columns\_to\_load</span> / <span className="em">columns\_to\_skip</span>, which otherwise require a header row.</p>
                  <p>Note: for a source with no header row, supplying this option changes how source columns are matched to target columns – from positional matching to matching by name. Target columns with no matching source column are then populated from their defaults or null rather than being filled positionally.</p>
                  <p>The list is not validated against the file’s actual column count. If it is shorter, the trailing source columns are left unnamed.</p>
                </li>

                <li>
                  <p><strong>num\_tasks\_per\_rank</strong> – Number of tasks for reading file per rank. Default will be system configuration parameter, external\_file\_reader\_num\_tasks.</p>
                </li>

                <li>
                  <p><strong>poll\_interval</strong> – If <span className="em">true</span>, the number of seconds between attempts to load external files into the table. If zero, polling will be continuous as long as data is found. If no data is found, the interval will steadily increase to a maximum of 60 seconds. The default value is ‘0’.</p>
                </li>

                <li>
                  <p><strong>primary\_keys</strong> – Comma separated list of column names to set as primary keys, when not specified in the type.</p>
                </li>

                <li>
                  <p><strong>refresh\_method</strong> – Method by which the table can be refreshed from its source data. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>manual</strong> – Refresh only occurs when manually requested by invoking the refresh action of <a className="reference internal" href="#gpudb.GPUdb.alter_table" title="gpudb.GPUdb.alter_table"><code className="xref py py-meth docutils literal notranslate"><span className="pre">GPUdb.alter\_table()</span></code></a> on this table.</p>
                    </li>

                    <li>
                      <p><strong>on\_start</strong> – Refresh table on database startup and when manually requested by invoking the refresh action of <a className="reference internal" href="#gpudb.GPUdb.alter_table" title="gpudb.GPUdb.alter_table"><code className="xref py py-meth docutils literal notranslate"><span className="pre">GPUdb.alter\_table()</span></code></a> on this table.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘manual’.</p>
                </li>

                <li>
                  <p><strong>schema\_registry\_connection\_retries</strong> – Confluent Schema registry connection timeout (in secs).</p>
                </li>

                <li>
                  <p><strong>schema\_registry\_connection\_timeout</strong> – Confluent Schema registry connection timeout (in secs).</p>
                </li>

                <li>
                  <p><strong>schema\_registry\_max\_consecutive\_connection\_failures</strong> – Max records to skip due to SR connection failures, before failing.</p>
                </li>

                <li>
                  <p><strong>max\_consecutive\_invalid\_schema\_failure</strong> – Max records to skip due to schema related errors, before failing.</p>
                </li>

                <li>
                  <p><strong>schema\_registry\_schema\_name</strong> – Name of the Avro schema in the schema registry to use when reading Avro records.</p>
                </li>

                <li>
                  <p><strong>shard\_keys</strong> – Comma separated list of column names to set as shard keys, when not specified in the type.</p>
                </li>

                <li>
                  <p><strong>skip\_lines</strong> – Skip a number of lines from the beginning of the file.</p>
                </li>

                <li>
                  <p><strong>start\_offsets</strong> – Starting offsets by partition to fetch from kafka. A comma separated list of partition:offset pairs.</p>
                </li>

                <li>
                  <p><strong>subscribe</strong> – Continuously poll the data source to check for new data and load it into the table. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>table\_insert\_mode</strong> – Insertion scheme to use when inserting records from multiple shapefiles. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>single</strong> – Insert all records into a single table.</p>
                    </li>

                    <li>
                      <p><strong>table\_per\_file</strong> – Insert records from each file into a new table corresponding to that file.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘single’.</p>
                </li>

                <li>
                  <p><strong>text\_comment\_string</strong> – Specifies 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.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. The default value is ‘#’.</p>
                </li>

                <li>
                  <p><strong>text\_delimiter</strong> – Specifies the character delimiting field values in the source data and field names in the header (if present).</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. The default value is ‘,’.</p>
                </li>

                <li>
                  <p><strong>text\_escape\_character</strong> – Specifies the character that is used to escape other characters in the source data.</p>
                  <p>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, and vertical tab, respectively. For example, the escape character followed by an ‘n’ will be interpreted as a newline within a field value.</p>
                  <p>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.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only.</p>
                </li>

                <li>
                  <p><strong>text\_has\_header</strong> – Indicates whether the source data contains a header row.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘true’.</p>
                </li>

                <li>
                  <p><strong>text\_header\_property\_delimiter</strong> – Specifies the delimiter for <a className="reference external" href="/content/concepts/types/#column-properties">column properties</a> in the header row (if present). Cannot be set to same value as <span className="em">text\_delimiter</span>.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. The default value is ‘|’.</p>
                </li>

                <li>
                  <p><strong>text\_null\_string</strong> – Specifies the character string that should be interpreted as a null value in the source data.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. The default value is ‘\N’.</p>
                </li>

                <li>
                  <p><strong>text\_quote\_character</strong> – Specifies 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.</p>
                  <p>For <span className="em">delimited\_text</span> <span className="em">file\_type</span> only. The default value is ‘”’.</p>
                </li>

                <li>
                  <p><strong>text\_search\_columns</strong> – Add ‘text\_search’ property to internally inferenced string columns. Comma separated list of column names or ‘\*’ for all columns. To add ‘text\_search’ property only to string columns greater than or equal to a minimum size, also set the <span className="em">text\_search\_min\_column\_length</span></p>
                </li>

                <li>
                  <p><strong>text\_search\_min\_column\_length</strong> – Set the minimum column size for strings to apply the ‘text\_search’ property to. Used only when <span className="em">text\_search\_columns</span> has a value.</p>
                </li>

                <li>
                  <p><strong>transformations</strong> – Comma-separated expressions, one per target table column. Each expression is evaluated per record. Empty entries (two consecutive commas) mean no transformation for that column – the value is resolved from the input record, table default, NULL, or an error. Expressions may reference input columns by name or by position ($1 for the first input column, $2 for the second, etc.). The default value is ‘’.</p>
                </li>

                <li>
                  <p><strong>trim\_space</strong> – If set to <span className="em">true</span>, remove leading or trailing space from fields. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>truncate\_strings</strong> – If set to <span className="em">true</span>, truncate string values that are longer than the column’s type size. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p><strong>truncate\_table</strong> – If set to <span className="em">true</span>, truncates the table specified by input parameter <span className="em">table\_name</span> prior to loading the file(s). Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>

                <li>
                  <p>type\_inference\_max\_records\_read</p>
                </li>

                <li>
                  <p><strong>type\_inference\_mode</strong> – Optimize type inferencing for either speed or accuracy. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>accuracy</strong> – Scans data to get exactly-typed and sized columns for all data scanned.</p>
                    </li>

                    <li>
                      <p><strong>speed</strong> – Scans data and picks the widest possible column types so that ‘all’ values will fit with minimum data scanned.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘speed’.</p>
                </li>

                <li>
                  <p><strong>remote\_query</strong> – Remote SQL query from which data will be sourced.</p>
                </li>

                <li>
                  <p><strong>remote\_query\_filter\_column</strong> – Name of column to be used for splitting <span className="em">remote\_query</span> into multiple sub-queries using the data distribution of given column.</p>
                </li>

                <li>
                  <p><strong>remote\_query\_increasing\_column</strong> – Column on subscribed remote query result that will increase for new records (e.g., TIMESTAMP).</p>
                </li>

                <li>
                  <p><strong>remote\_query\_partition\_column</strong> – Alias name for <span className="em">remote\_query\_filter\_column</span>.</p>
                </li>

                <li>
                  <p><strong>enable\_inplace\_updates</strong> – Applies only when upserting (when update\_on\_existing\_pk is true). If set to true (the default), an existing record matched by primary key is modified in place. If set to false, the matched record is updated by deleting it and inserting a replacement (delete and insert), which prevents the change from being reflected in dependent materialized views until they are refreshed. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p>true</p>
                    </li>

                    <li>
                      <p>false</p>
                    </li>
                  </ul>

                  <p>The default value is ‘true’.</p>
                </li>

                <li>
                  <p><strong>update\_on\_existing\_pk</strong> – Specifies the record collision policy for inserting into a table with a <a className="reference external" href="/content/concepts/tables/#primary-keys">primary key</a>. If set to <span className="em">true</span>, any existing table record with primary key values that match those of a record being inserted will be replaced by that new record (the new data will be ‘upserted’). If set to <span className="em">false</span>, any existing table record with primary key values that match those of a record being inserted will remain unchanged, while the new record will be rejected and the error handled as determined by <span className="em">ignore\_existing\_pk</span> and <span className="em">error\_handling</span>. If the specified table does not have a primary key, then this option has no effect. Allowed values are:</p>

                  <ul className="simple">
                    <li>
                      <p><strong>true</strong> – Upsert new records when primary keys match existing records.</p>
                    </li>

                    <li>
                      <p><strong>false</strong> – Reject new records when primary keys match existing records.</p>
                    </li>
                  </ul>

                  <p>The default value is ‘false’.</p>
                </li>
              </ul>

              <p>The default value is an empty dict ( {"{"}{"}"} ).</p>
            </div>
          </div>
        </div>
      </div>

      <p><strong>Returns</strong></p>

      <div className="blockquote">
        <div>
          <p>A dict with the following entries–</p>

          <div className="dl simple">
            <div className="dt">table\_name (<span className="em">str</span>) –</div>

            <div className="dd">
              <p>Value of input parameter <span className="em">table\_name</span>.</p>
            </div>

            <div className="dt">type\_id (<span className="em">str</span>) –</div>

            <div className="dd">
              <p>ID of the currently registered table structure <a className="reference external" href="/content/concepts/types/">type</a> for this external table.</p>
            </div>

            <div className="dt">type\_definition (<span className="em">str</span>) –</div>

            <div className="dd">
              <p>A JSON string describing the columns of the created external table.</p>
            </div>

            <div className="dt">type\_label (<span className="em">str</span>) –</div>

            <div className="dd">
              <p>The user-defined description associated with the table’s structure.</p>
            </div>

            <div className="dt">type\_properties (<span className="em">dict of str to lists of str</span>) –</div>

            <div className="dd">
              <p>A mapping of each external table column name to an array of column properties associated with that column.</p>
            </div>

            <div className="dt">count\_inserted (<span className="em">long</span>) –</div>

            <div className="dd">
              <p>Number of records inserted into the external table.</p>
            </div>

            <div className="dt">count\_skipped (<span className="em">long</span>) –</div>

            <div className="dd">
              <p>Number of records skipped, when not running in <span className="em">abort</span> error handling mode.</p>
            </div>

            <div className="dt">count\_updated (<span className="em">long</span>) –</div>

            <div className="dd">
              <p>\[Not yet implemented] Number of records updated within the external table.</p>
            </div>

            <div className="dt">info (<span className="em">dict of str to str</span>) –</div>

            <div className="dd">
              <p>Additional information.</p>
            </div>

            <div className="dt">files (<span className="em">list of str</span>) –</div>

            <div className="dd">
              <p>The list of source files used to create the external table.</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
