Kinetica has broad support for the SQL-92 standard through its ODBC connector interface. For details on installation, configuration, & use, see the The ODBC/JDBC Connector section.
Topics
The basic form of the supported SELECT
statement is:
SELECT [DISTINCT | TOP <n>] <column expression list>
FROM <table name>
[<join type> JOIN <join table name> ON <join expression>],...
[WHERE <filtering expression list>]
[GROUP BY <grouping expression list>]
[HAVING <group filtering expression list>]
[ORDER BY <ordering expression list>]
Note
The *
can be used to specify all columns in the column expression list.
TOP <n>
returns up to n=20000 records by default, but is configurable.
See Joins for more detail & limitations on joins. Supported join type keywords are:
INNER
CROSS
LEFT
RIGHT
FULL OUTER
The grouping expression list may contain column names, expressions, or column
positions (e.g., GROUP BY 2
to aggregate on the 2nd column in the SELECT
list).
Ordering is NULLS FIRST
. Changing this behavior is not currently supported.
For example:
SELECT
e.first_name || ' ' || e.last_name as "Employee_Name",
m.first_name || ' ' || m.last_name as "Manager_Name"
FROM
emp e
LEFT JOIN
emp m ON e.manager_id = m.id
WHERE
e.dept_id = 1
ORDER BY
e.hire_date
The UNION
set operator creates a single list of records from the results of
two SELECT
statements. Use the ALL
keyword to keep all records from
both sets; omit it to remove duplicate records and form a single list of records
unique between the two sets. See Limitations and Cautions for limitations.
<SELECT statement>
UNION [ALL]
<SELECT statement>
The INTERSECT
set operator creates a single list of records that exist in
both of the result sets from two SELECT
statements. See
Limitations for limitations.
<SELECT statement>
INTERSECT
<SELECT statement>
The EXCEPT
set operator performs set subtraction, creating a single list of
records that exist in the first SELECT
statement's result set, but not in
the second SELECT
statement's result set. See Limitations for
limitations:
<SELECT statement>
EXCEPT
<SELECT statement>
The WITH
set operation, also known as a Common Table Expression (CTE)
creates a set of data that can be aliased and used one or more times in
subsequent operations. The aliased set can be used within the SELECT
,
FROM
, or WHERE
clauses of a subsequent query; a subsequent CTE within
the same WITH
operation; or an INSERT
, UPDATE
, or DELETE
statement.
Recursive WITH
operations are not supported--the aliased set cannot refer to
itself. The alias must be unique within the WITH
statement--no other column
or column alias can be similarly named, for example. Also, when used in a
FROM
clause and given a table alias, the table alias must be preceded with
AS
.
Each CTE definition within a WITH
statement is structured as follows:
<cte name> [(column list)] AS (<SELECT statement>)
Each WITH
statement can contain one or more CTE definitions, followed by
a SELECT
, INSERT
, UPDATE
, or DELETE
statement, as shown here:
WITH <cte definition>,...
<SELECT | INSERT | UPDATE | DELETE statement>
For example:
WITH
dept2_emp_sal_by_mgr (manager_id, sal) AS
(
SELECT manager_id, sal
FROM emp
WHERE dept_id = 2
)
SELECT
manager_id dept2_mgr_id,
MAX(sal) dept2_highest_emp_sal_per_mgr,
COUNT(*) as dept2_total_emp_per_mgr
FROM dept2_emp_sal_by_mgr
GROUP BY manager_id
WITH
dept2_emp AS
(
SELECT first_name, last_name, manager_id
FROM emp
WHERE dept_id = 2
),
dept2_mgr AS
(
SELECT first_name, last_name, id
FROM emp
WHERE dept_id = 2
)
INSERT INTO dept2_emp_mgr_roster (emp_first_name, emp_last_name, mgr_first_name, mgr_last_name)
SELECT d2emp.first_name, d2emp.last_name, d2mgr.first_name, d2mgr.last_name
FROM
dept2_emp as d2emp
JOIN dept2_mgr as d2mgr ON d2emp.manager_id = d2mgr.id
An expression can consist of a literal constant, a column name, or a function applied to a constant or column name. A compound expression is an operation or function applied to one or more expressions.
The following are the supported expression operators:
+
addition-
subtraction*
multiplication/
division()
grouping||
string concatenationNote
Use double quotes to specify column names in a case-sensitve manner.
Conversion Function | Description |
---|---|
or
|
Converts Note:
|
Numeric | String | Date/Time |
---|---|---|
|
|
|
Date/Time Function | Description | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CURRENT_DATE() |
Returns the current system date | ||||||||||||||||||||||
CURRENT_TIME() |
Returns the current system time | ||||||||||||||||||||||
CURRENT_TIMESTAMP() |
Returns the current system date/time | ||||||||||||||||||||||
DATEDIFF(expr_end, expr_begin) |
Determines the difference between two dates, irrespective of time
component, as the number of days when expr_begin is
subtracted from expr_end ; returns a negative number of days
if expr_begin occurs after expr_end |
||||||||||||||||||||||
DAY(expr) |
Alias for DAYOFMONTH |
||||||||||||||||||||||
DAYNAME(expr) |
Extracts the day of the week from expr and converts it to the
corresponding day name [Sunday - Saturday ] |
||||||||||||||||||||||
DAYOFMONTH(expr) |
Extracts the day of the month from expr [1 - 31 ] |
||||||||||||||||||||||
DAYOFWEEK(expr) |
Extracts the day of the week from expr [1 - 7 ];
(1 = Sunday) |
||||||||||||||||||||||
DAYOFYEAR(expr) |
Extracts the day of the year from expr [1 - 366 ] |
||||||||||||||||||||||
HOUR(expr) |
Extracts the hour of the day from expr [0 - 23 ] |
||||||||||||||||||||||
<expr> + INTERVAL <amount> <part>
<expr> - INTERVAL <amount> <part> |
Adds to or subtracts from the date/time
|
||||||||||||||||||||||
MINUTE(expr) |
Extracts the minute of the day from expr [0 - 59 ] |
||||||||||||||||||||||
MONTH(expr) |
Extracts the month of the year from expr [1 - 12 ] |
||||||||||||||||||||||
MONTHNAME(expr) |
Extracts the month of the year from expr and converts it to
the corresponding month name [January - December ] |
||||||||||||||||||||||
QUARTER(expr) |
Extracts the quarter of the year from expr [1 - 4 ];
(1 = January, February, & March) |
||||||||||||||||||||||
SECOND(expr) |
Extracts the seconds of the minute from expr [0 - 59 ] |
||||||||||||||||||||||
TIMESTAMPADD(ts_part, ts_amount, expr) |
Adds the positive or negative integral
|
||||||||||||||||||||||
TIMESTAMPDIFF(ts_part, expr_begin, expr_end) |
Determines the difference between two dates, calculating the
result in the units specified; more precisely, how many units of
Note: this is symmetric with |
||||||||||||||||||||||
WEEK(expr) |
Extracts the week of the year from expr [1 - 53 ];
each full week starts on Sunday (1 = week containing
Jan 1st) |
||||||||||||||||||||||
YEAR(expr) |
Extracts the year from expr ; 4-digit year, A.D. |
Math Function | Description |
---|---|
ABS(expr) |
Returns the absolute value of expr |
ACOS(expr) |
Calculates the inverse cosine (arccosine) of expr |
ASIN(expr) |
Calculates the inverse sine (arcsine) of expr |
ATAN(expr) |
Calculates the inverse tangent (arctangent) of expr |
ATAN2(x, y) |
Calculates the inverse tangent (arctangent) of the angle at the
origin where the opposite end of the hypotenuse is at
(x , y ) |
CEIL(expr) |
Alias for CEILING |
CEILING(expr) |
Rounds expr up to the next highest integer |
COS(expr) |
Calculates the cosine of expr |
COT(expr) |
Calculates the cotangent of expr |
DEGREES(expr) |
Converts expr (in radians) to degrees |
EXP(expr) |
Raises e to the power of expr |
FLOOR(expr) |
Rounds expr down to the next lowest integer |
GREATEST(expr_a, ..., expr_N) |
Returns whichever of expr_a through expr_N has the
largest value, based on typed comparison |
LEAST(expr_a, ..., expr_N) |
Returns whichever of expr_a through expr_N has the
smallest value, based on typed comparison |
LOG(expr) |
Calculates the natural logarithm of expr |
LOG10(expr) |
Calculates the base-10 logarithm of expr |
MOD(dividend, divisor) |
Calculates the remainder after integer division of dividend
by divisor |
PI() |
Returns the value of pi |
POWER(base, exponent) |
Calculates base raised to the power of exponent |
RADIANS(expr) |
Converts expr (in degrees) to radians |
ROUND(expr, scale) |
Rounds
|
SIGN(expr) |
Determines whether a number is positive, negative, or zero; returns one of the following three values:
|
SIN(expr) |
Calculates the sine of expr |
SQRT(expr) |
Calculates the square root of expr |
TAN(expr) |
Calculates the tangent of expr |
TRUNCATE(expr, scale) |
Rounds
|
Some of the following null functions require parameters to be of convertible data types. Note that limited-width (charN) & unlimited-width (non-charN) string types are not convertible.
Null Function | Description |
---|---|
COALESCE(expr_a, ..., expr_N) |
Returns the value of the first expression that is
not null starting with expr_a and ending
with expr_N . If all are null, then null
is returned. All expressions should be of the
same or convertible data type. |
IFNULL(expr_a, expr_b) |
Returns expr_a if it is not null; otherwise,
returns expr_b . Both should be of the same or
convertible data type. |
ISNULL(expr) |
Returns 1 if expr is null; otherwise,
returns 0 |
NULLIF(expr_a, expr_b) |
Returns null if expr_a equals expr_b ;
otherwise, returns the value of expr_a ; both
expressions should be of the same or convertible
data type. |
NVL(expr_a, expr_b) |
Alias for IFNULL |
NVL2(expr, value_if_not_null, value_if_null) |
Evaluates expr : if not null, returns
value_if_not_null ; if null, returns
value_if_null . Both value_if_not_null &
value_if_null should be of the same data type
as expr or implicitly convertible. |
ZEROIFNULL(expr) |
Alias for IFNULL(expr, 0) ; not applicable to
strings |
The following functions only apply to limited-width (charN) strings.
String Function | Description |
---|---|
ASCII(expr) |
Returns the ASCII code for the first character in expr |
CHAR(expr) |
Returns the character associated with the ASCII code in expr |
CONCAT(expr_a, expr_b) |
Performs a string concatenation of expr_a & expr_b |
LCASE(expr) |
Converts expr to lowercase |
LEFT(expr, num_chars) |
Returns the leftmost num_chars characters from expr |
LENGTH(expr) |
Returns the number of characters in expr |
LOCATE(match_expr, ref_expr, [start_pos]) |
Returns the starting position of the first match of
match_expr in ref_expr , starting from position 1 or
start_pos (if specified) |
LOWER(expr) |
Alias for LCASE |
LTRIM(expr) |
Removes whitespace from the left side of expr |
POSITION(match_expr, ref_expr, [start_pos]) |
Alias for LOCATE |
REPLACE(ref_expr, match_expr, repl_expr) |
Replaces every occurrence of match_expr in ref_expr with
repl_expr |
RIGHT(expr, num_chars) |
Returns the rightmost num_chars characters from the expr |
RTRIM(expr) |
Removes whitespace from the right side of expr |
SUBSTR(expr, start_pos, num_chars) |
Alias for SUBSTRING |
SUBSTRING(expr, start_pos, num_chars) |
Returns num_chars characters from the expr , starting at
the 1-based start pos |
TRIM(expr) |
Removes whitespace from both sides of expr |
UCASE(expr) |
Converts expr to uppercase |
UPPER(expr) |
Alias for UCASE |
Scalar Function | Description |
---|---|
DECODE(expr, match_a, value_a, ..., match_N, value_N) |
Evaluates expr : returns the first value
whose corresponding match is equal to expr |
IF(expr, value_if_true, value_if_false) |
Evaluates expr : if true, returns
value_if_true ; otherwise, value_if_false |
The case statement acts as a scalar function, but has two more complex forms.
Note that for each of these CASE
statements, the value expressions must all
be of the same or convertible data type.
In the first form, each WHEN
is followed by a conditional expression whose
corresponding THEN
expression will have its value returned, if true.
Control will continue through each WHEN
until a match is found and the
corresponding value returned; if no match is found, the value of the ELSE
expression will be returned, or null, if no ELSE
clause exists.
CASE
WHEN <cond_expr_a> THEN <value_expr_a>
...
WHEN <cond_expr_N> THEN <value_expr_N>
ELSE <value_expr>
END
In the second form, the CASE
expression is evaluated. A match of that
result will be attempted against each WHEN
expression until a match is found
and the value of the corresponding THEN
expression returned; if no match is
found, the value of the ELSE
expression will be returned, or null, if no
ELSE
clause exists.
CASE <expr>
WHEN <match_expr_a> THEN <value_expr_a>
...
WHEN <match_expr_N> THEN <value_expr_N>
ELSE <value_expr>
END
Note
This second version below has greater optimization than the first.
Examples:
CASE
WHEN color = 1 THEN 'Red'
WHEN color >= 2 THEN 'Green'
ELSE 'Blue'
END
CASE mod(length(text), 2)
WHEN 0 THEN 'Even'
WHEN 1 THEN 'Odd'
ELSE null
END
Aggregate Function | Description |
---|---|
COUNT(*) |
Returns the number of records in a table |
COUNT(expr) |
Returns the number of non-null data values in expr |
COUNT(DISTINCT expr) |
Returns the number of distinct non-null data values in expr |
SUM(expr) |
Sums all the values of expr |
MIN(expr) |
Finds the minimum value of expr |
MAX(expr) |
Finds the maximum value of expr |
AVG(expr) |
Calculates the average value of expr |
MEAN(expr) |
Alias for AVG |
STDDEV(expr) |
Alias for STDDEV_POP |
STDDEV_POP(expr) |
Calculates the population standard deviation of the values of expr |
STDDEV_SAMP(expr) |
Calculates the sample standard deviation of the values of expr |
VAR(expr) |
Alias for VAR_POP |
VAR_POP(expr) |
Calculates the population variance of the values of expr |
VAR_SAMP(expr) |
Calculates the sample variance of the values of expr |
Predicate are generally used within a SQL WHERE
clause to query records.
They compare the values of two or more expressions; whenever a record meets
the criteria defined in a predicate clause it will be marked as eligible
to be part of the query result set. If it meets all predicate clauses defined
within a query, it will be returned in the result set.
A single predicate clause may use a simple predicate operator to compare the values of two expressions or a more complex predicate clause form. A compound predicate clause uses a compound predicate operator to link together multiple predicate clauses to further refine a result set.
Unlimited-width (non-charN) strings can only be used within
equality-based predicates, e.g. =
, IN
, etc.
=
equality!=
or <>
inequality<
less than<=
less than or equal to>
greater than>=
greater than or equal toIn the following list of predicate clauses, ref_expr
is the reference
expression to apply the predicate to; note that EXISTS
has no reference
expression.
Predicate Clause | Description |
---|---|
<expr_a> <pred_op> <expr_b> |
Matches records where expr_a relates to expr_b
according to predicate operator
pred_op . |
<ref_expr> <pred_op> ALL (<SELECT statement>) |
Matches records where the reference expression ref_expr
relates to all of the results of SELECT statement
according to the predicate operator
pred_op |
<ref_expr> <pred_op> ANY (<SELECT statement>) |
Matches records where the reference expression ref_expr
relates to any of the results of SELECT statement
according to the predicate operator
pred_op |
<ref_expr> [NOT] BETWEEN <begin_expr> AND <end_expr> |
Matches records where the reference expression ref_expr
is (or is NOT ) between the values of begin_expr and
end_expr |
<ref_expr> [NOT] IN (<match_list>) |
Matches records where the reference expression ref_expr
is (or is NOT ) in the match_list list of match
values. The list can either be a comma-separated list of
terms/expressions or the result of a SELECT statement. |
<ref_expr> IS [NOT] NULL |
Matches records where the reference expression ref_expr
is (or is NOT ) null. |
<ref_expr> [NOT] LIKE <match_expr> |
Matches records where reference expression
|
[NOT] EXISTS (<SELECT statement>) |
Matches records where Note: This clause has limited utility, as correlated subqueries, upon whose real value it relies, are unsupported at this time. |
Predicate Operator | Description |
---|---|
<pred_a> AND <pred_b> |
Matches records where both pred_a & pred_b are true |
<pred_a> OR <pred_b> |
Matches records where either pred_a or pred_b is true |
NOT <pred_b> |
Matches records where pred is false |
Hint strings (KI_HINT
) can be added as comments within queries, and affect
just the query in which they appear. They will override the corresponding
client & server settings of the same names (when such settings exist). For
example:
SELECT /* KI_HINT_KEEP_TEMP_TABLES, KI_HINT_ROWS_PER_FETCH(20000) */ first_name, last_name
FROM customer
Hint | Description |
---|---|
KI_HINT_ALLOW_PARTIAL_PASSDOWN |
This avoids the error: Query not fully handled, though the query should be reported for further investigation & handling. This hint will try to process the query as best as it can, which will probably not have optimal efficiency. |
KI_HINT_DONT_COMBINE |
Don’t combine joins and unions for this query. |
KI_HINT_DONT_FILTER_IN_AGGREGATE |
Use when issuing a filter on an aggregation of a join |
KI_HINT_EXPLAIN_JOINS |
Output join explain plan to logs |
KI_HINT_KEEP_CROSSJOINS |
Use when issuing a cross join that is being handled as an inner join and returning incorrect results |
KI_HINT_KEEP_TEMP_TABLES |
Don’t erase temp tables created by this query |
KI_HINT_MATERIALIZE_AFTER_JOIN |
Use projection to materialize joins |
KI_HINT_MAX_QUERY_DIMENSIONS(n) |
Number of joins within the query that are not against primary key columns |
KI_HINT_MAX_ROWS_TO_FETCH(n) |
Set maximum number of rows for a query to retrieve |
KI_HINT_NO_PASSDOWN |
Don’t use optimizations for this query |
KI_HINT_ROWS_PER_FETCH(n) |
Set number of rows to be requested in each batch (also used for batch size when inserting) |
KI_HINT_SIMULATION |
Don’t issue calls to the database, but output the calls that would be made to the log |
Kinetica supports the basic notion of SQL tables as containers of one or more columns of data. Tables can be created, altered, and dropped.
A column definition consists of a column type and optional column size, column properties, and nullability. Column properties are used to optimize data storage & speed.
The format of a defined column is column name, followed by column definition. A column definition is column type optionally followed by any column size limit or column properties all enclosed in parentheses, followed by an optional nullability statement:
<column name> <column type> [(<column size / column property>,...)] [[NOT] NULL]
This format applies to any DDL statement requiring the definition of columns, like CREATE TABLE and ALTER TABLE (when adding/modifying a column).
For example, the following are valid defined columns:
id INT(SHARD_KEY) -- makes the id column an integer that is also the table's shard key
name VARCHAR(50, TEXT_SEARCH) -- makes the name column a 50-char limited string that is text-searchable
ip VARCHAR(IPV4) -- makes the ip column a string in IPv4 format
cost DECIMAL(10, 2, STORE_ONLY) -- makes the cost column an 8.2 decimal that is not held in memory
Category | Data Type | Description | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Number | INTEGER |
Native type: integer | |||||||||||||||||||||||
INT |
Alias for INTEGER |
||||||||||||||||||||||||
BIGINT |
Native type: long | ||||||||||||||||||||||||
LONG |
Alias for BIGINT |
||||||||||||||||||||||||
FLOAT |
Native type: float | ||||||||||||||||||||||||
REAL |
Alias for FLOAT |
||||||||||||||||||||||||
DOUBLE |
Native type: double | ||||||||||||||||||||||||
DECIMAL |
Alias for BIGINT |
||||||||||||||||||||||||
DECIMAL(P,S) |
Native type: varies by
|
||||||||||||||||||||||||
NUMERIC |
Alias for DECIMAL |
||||||||||||||||||||||||
String | VARCHAR |
Native type: string; character limit based on configured system property | |||||||||||||||||||||||
VARCHAR(N) |
Native type: char1 - char256 or string, whichever is large enough to hold N characters | ||||||||||||||||||||||||
STRING |
Alias for VARCHAR |
||||||||||||||||||||||||
TEXT |
Alias for VARCHAR |
||||||||||||||||||||||||
Date/Time | TYPE_DATE |
Native type: date | |||||||||||||||||||||||
TYPE_TIME |
Native type: time | ||||||||||||||||||||||||
TYPE_TIMESTAMP |
Native type: timestamp | ||||||||||||||||||||||||
DATE |
Alias for TYPE_DATE |
||||||||||||||||||||||||
TIME |
Alias for TYPE_TIME |
||||||||||||||||||||||||
TIMESTAMP |
Alias for TYPE_TIMESTAMP |
Property | Description |
---|---|
DISK_OPTIMIZED |
Applies disk-optimized data handling to a column |
IPV4 |
Treats the associated string-based column as an IPv4 address |
PRIMARY_KEY |
Treats the associated column as a primary key, or part of a composite primary key if other columns also have this designation |
SHARD_KEY |
Treats the associated column as a shard key, or part of a composite shard key if other columns also have this property |
STORE_ONLY |
Applies store-only data handling to a column |
TEXT_SEARCH |
Applies text-searchability to a column |
Creates a new table in the configured ParentSet collection. If
OR REPLACE
is specified, any existing table with the same name will be
dropped before creating this one. If REPLICATED
is specified, the table
will be distributed within the database as a replicated
table.
The basic form of the supported CREATE TABLE
statement follows. See
here for column definition format.
CREATE [OR REPLACE] [REPLICATED] TABLE <table name>
(
<column name> <column definition>,
...
<column name> <column definition>,
[PRIMARY KEY (<column name>,...)]
)
For example:
CREATE REPLICATED TABLE various_types
(
i INTEGER NOT NULL, -- non-nullable integer
bi BIGINT(SHARD_KEY) NOT NULL, -- long, shard key
f FLOAT, -- float
d DOUBLE(STORE_ONLY), -- double, not in-memory
s VARCHAR(STORE_ONLY, TEXT_SEARCH), -- string, searchable, not in-memory, only limited in size by system-configured value
c VARCHAR(30), -- char32
ip VARCHAR(IPV4), -- IP address
ts TYPE_TIMESTAMP, -- timestamp
dc1 DECIMAL, -- long
dc2 DECIMAL(18,4), -- decimal
dc3 DECIMAL(6,5), -- float
dc4 DECIMAL(7, 5, STORE_ONLY), -- double, not in-memory
n NUMERIC(5, 3), -- will use the next largest native numeric type to hold the specified number type
PRIMARY KEY (i, bi) -- primary key columns must be NOT NULL
)
Creates a new table from the given query in the configured ParentSet
collection. If OR REPLACE
is specified, any existing table with the same
name will be dropped before creating this one. If TEMP
is specified, the
table will be read-only and will be removed the next time the database is
restarted; otherwise, the table will be read/write and will persist through
database restarts.
The general format is:
CREATE [OR REPLACE] [TEMP] TABLE <table name> AS
(
<SELECT statement>
)
For example, to create a temporary read-only table, failing if it already exists:
CREATE TEMP TABLE new_table AS
(
SELECT *
FROM old_table
)
Note
Primary & foreign keys are not transferred to the new table, though shard keys will be. See Limitations for other restrictions.
To create a permanent read/write table, replacing one of the same name, if it exists:
CREATE OR REPLACE TABLE new_table AS
(
SELECT *
FROM old_table
)
Alters a table's name, time-to-live (TTL), or column set. A column can be added or removed, or have its column definition modified.
Note
In the default configuration of Kinetica, tables cannot be renamed or have
their TTLs adjusted via ALTER TABLE
. By default, the ODBC connector uses
the MASTER
collection in the database. This collection is protected,
meaning that no table-level alterations can be made to tables contained
within it. For ALTER TABLE
to be able to perform these modifications
successfully, a non-protected collection must be used instead. See
ODBC Configuration for details about changing the
ParentSet parameter, which specifies the collection to use.
A table can be renamed. See note for limitations.
ALTER TABLE <table name>
RENAME TO <new table name>
A table's time-to-live can be altered. See note for limitations.
ALTER TABLE <table name>
SET TTL <new ttl>
A column can be added, specifying a column definition.
A new column can have its values initially populated through the use of the
DEFAULT
keyword. These values can either be a string/numeric constant or
the name of an existing column in the table from which values can be copied into
the new column. This default value is only in effect for the column creation;
the new column will have no default value after that.
ALTER TABLE <table name>
ADD <column name> <column definition> [DEFAULT <string/numeric constant | column name>]
For example:
ALTER TABLE employee
ADD salary NUMERIC(10, 2, STORE_ONLY) NOT NULL DEFAULT 0
A column can have its column definition modified, affecting column type, column size, column properties, and nullability.
If a column is modified to be non-nullable, it will be populated with default
values--empty string for string fields and 0
for numeric fields.
Either of the following can be used to modify a column:
ALTER TABLE <table name>
MODIFY [COLUMN] <column name> <column definition>
ALTER TABLE <table name>
ALTER COLUMN <column name> <column definition>
For example:
ALTER TABLE employee
ALTER COLUMN first_name VARCHAR(50, TEXT_SEARCH) NOT NULL
An existing column can be removed from a table:
ALTER TABLE <table name>
DROP COLUMN <column name>
To insert one record with literal values, use this format:
INSERT INTO <table name> [(<column list>)]
VALUES (<column value list>)
For example:
INSERT INTO target_table (x, y, point_name)
VALUES (99, 100, 'Vertex A')
To insert multiple records, using another table as the source, use this format:
INSERT INTO <table name> [(<column list>)]
<SELECT statement>
For example:
INSERT INTO target_table
SELECT *
FROM source_table
WHERE x > 100
Note
When specifying a column list, any non-nullable fields not included in the
list will be given default values--empty string for strings, and 0
for
numerics. The fields in the column list and the fields selected must align.
Updates can only set columns to constant values, not other column values or results of expressions. The general format is:
UPDATE <table name>
SET
<key 1> = <value 1>,
...
<key n> = <value n>
[WHERE <expression list>]
For example:
UPDATE emp
SET
sal = 100000,
mgr = 1234
WHERE empno = 1111
Deletes records from a table; the general format is:
DELETE
FROM <table name>
[WHERE <expression list>]
For example:
DELETE
FROM emp
WHERE empno = 1111
File must be accessible from machine running ODBC Server
First row should contain column names, and optionally types, similar to importing with GAdmin
File must have fields separated by commas
Strings optionally enclosed in double-quotes
Use double-quotes for string data containing commas; use two consecutive double-quotes as an escape code for double-quoted string data containing double-quotes:
"This string contains a "" quote mark and a "","" double-quoted comma."
INSERT INTO calcs (int0, int1, int2, int3)
SELECT int0, int1, int2, int3
FROM FILE."C:\Tableau\Data\Calcs.csv"
Kinetica has some limitations for any columns marked as store-only and string columns lacking a charN attribute.
String columns with no charN attribute are stored in whole on disk and in hashed form in memory. Because the strings are only available for processing as hashes, only equality-based operations can be applied to them.
ZEROIFNULL
)COUNT
COUNT DISTINCT
WHERE
(predicate condition must be equality-based)JOIN
(join condition must be equality-based)GROUP BY
UNION
INTERSECT
EXCEPT
CREATE TABLE...AS
Columns marked store-only are only stored on disk, not in memory. Because they are not available for processing, only data extraction operations can be applied to them.
WHERE
GROUP BY
JOIN
UNION
INTERSECT
EXCEPT
CREATE TABLE...AS
RANK
DENSE_RANK
ROW_NUMBER
NTILE
OVER/PARTITIONED BY
CREATE VIEW
CREATE OR REPLACE VIEW
DROP VIEW