Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dev:sql:statements:create_table:home [2010/05/21 15:33]
tdo
dev:sql:statements:create_table:home [2016/06/28 22:38] (current)
Line 1: Line 1:
 {{page>:​top_add&​nofooter&​noeditbtn}} {{page>:​top_add&​nofooter&​noeditbtn}}
-<​html><​div align="​center"><​span style="​color:​red">​DRAFT</​span></​div></​html>​ 
-====== Omnidex SQL: CREATE TABLE ====== 
-{{page>:​sql_bar&​nofooter&​noeditbtn}} 
-===== Description ===== 
  
-The CREATE TABLE is used to specify metadata to the Omnidex Environment or to alternatively create temporary tables in the underlying data base or temporary operating system files.  ​ 
  
-Note that unlike typical RDBMS CREATE TABLE statements, the Omnidex SQL CREATE TABLE statement only manipulates the Omnidex metadata layer and does not create underlying RDBMS tables or flat files.+Omnidex SQL Quicklinks ^^^^^ 
 +|[[dev:​sql:​overview | Overview ]] | [[dev:​sql:​statements:​home | Statements ]] | [[ dev:​sql:​functions:​home | Functions ]] | [[ dev:​sql:​examples:​home | Examples ]] | [[dev:​sql:​home | Quick Reference ]] |
  
-Even when Omnidex is used on a collection of Operating System files (POSIX or Windows/DOS files) the CREATE TABLE statement does not create the underlying operating system file or purge an existing file specified in the PHYSICAL clause of the CREATE TABLE statement. 
  
-When the GLOBAL TEMPORARY, LOCAL TEMPORARY or TEMPORARY modifiers are used before the TABLE keyword, then Omnidex will attempt to create a temporary table in the underlying RDBMS or an operating system temporary files. ​ These files will be deleted when the current Omnidex session that created the temporary table or file terminates.+====== Omnidex SQL: CREATE ​TABLE ======
  
-The CREATE TABLE statement can only be issued after a CREATE ENVIRONMENT and CREATE DATABASE ​statements ​have been issued or a connection has been made to an Omnidex Environment that already contains an ENVIRONMENT and a DATABASE.+**[[dev:​sql:​statements:​create_table:​home|Overview]]** | [[dev:​sql:​statements:​create_table:​syntax|Syntax]] | [[dev:​sql:​statements:​create_table:​examples|Examples]]
  
-===== Typical Example ===== 
  
-Most CREATE STATEMENTS will typically look like the following example where Omnidex indexing is specified after the column_name and column_type.+===== Overview =====
  
-<​code>​ +The CREATE TABLE statement declares a table in an Omnidex Environment FileTables that are declared in an environment can then be indexed and retrieved using SQL statements. An Omnidex table can point to an underlying OracleSQL ServerMySQL or ODBC table or view. An Omnidex table can also point to one or more raw data files that match the column layout of the table. ​ 
-CREATE TABLE mytable +
-  PHYSICAL "​mydir/​mytable.dat" +
-  ( +
-    user_id ​        ​INTEGER ​        ​OMNIDEX, +
-    region ​         CHARACTER(2) ​   OMNIDEX, +
-    full_name ​      ​CHARACTER(30) ​  ​QUICKTEXT,​ +
-    address ​        ​CHARACTER(60) ​  ​QUICKTEXT,​ +
-    city            CHARACTER(30) ​  ​QUICKTEXT,​ +
-    state           ​CHARACTER(2) ​   OMNIDEX +
-  ); +
-</​code> ​    +
-===== Syntax =====+
  
-<​code>​ +The basic CREATE TABLE statement records information about the underlying ​table or raw data files in the Omnidex Environment Catalog, but it does not actually create an underlying relational ​table or raw data file.  Normally, ​the relational table or view file is created using the relational database'​s tools. In the case of raw data files, the files are usually received from a data provider, ​and application or an ETL tool. The CREATE TABLE statement simply stores meta-data about the table in the Omnidex Environment File. Omnidex does support an exception ​to this rule for the creation of [[dev:​sql:​statements:​create_table:​temporary_tables|temporary tables]].
-  ​CREATE TABLE table +
-/* table options specified before ​the column ​and constraint specifications */ +
-      [NODE node] +
-      [OPTIONS “options”] +
-      [PHYSICAL “physical_file” | "​filespec"​ | shell_command ] +
-      [AUTOFILTER “criteria” ] +
-      [DATA_CACHING < cache_size | DYNAMIC | NONE >] +
-      [PARTITION_BY “criteria” ] +
-      [INDEX_MAINTENANCE index_maintenance ] +
-       +
-/* prefix ​table options ​to create a temporary table inserted before TABLE keyword */ +
-           [[ <​GLOBAL ​LOCAL> ​TEMPORARY ​]+
  
-/* column specifications */ +===== Table Characteristics =====
-      (  +
-         ​column_name ​   column_datatype ​  ​optional_omnidex_index+
  
-/* Omnidex ​Index Types */ +The CREATE TABLE statement declares the characteristics of the table. ​ At a minimum, each table has a name and instructions for accessing the physical data.  ​Omnidex ​supports configuration settings for each table, including settings for [[dev:​sql:​statements:​create_table:​delimited_files ​delimited files]], [[dev:​sql:​statements:​create_table:​data_cache ​data caches ]] and [[dev:​sql:​statements:​create_table:​index_maintenance ​index maintenance]]. Omnidex also provides ​[[admin:​features:​rollups:​home | rollup tables]which pre-aggregate another table in the database and automatically optimize queries against the table. ​   ​
-    +
-            ​[< OMNIDEX ​ +
-               ​QUICKTEXT ​ +
-               ​FULLTEXT ​ +
-               ​CUSTOM |  +
-               ​NATIVE> ​INDEX +
  
-/* column options */ +===== Columns Characteristics =====
-            [DEFAULT < literal | niladic-function | NULL >] +
-            [USAGE usage] +
-            [FORMAT format] +
-    [ , ]   /* separator between column and constraint definitions */+
  
-/* Inline Constraint Specifications - native indexes ​and Omnidex ​indexes */ +The CREATE TABLE statement specifies the columns for a table. ​ At a minimum, each column has a name and a datatype; however, it can also have other characteristics as well.  ​Omnidex ​allows a column to have a different name than the one used in the underlying relational database. ​ Omnidex allows the declaration of [[dev:​sql:​statements:​create_table:​column_usages ​column usages]] that describe the purpose of the column. Omnidex also allows ​[[dev:​sql:​statements:​create_table:​expression_columns ​expression-based columns]] that are the result of a SQL expression, even if it does not exist in the underlying database or data file.  ​ 
-          ​[CONSTRAINT constraint] +  
-               <[NOT] NULL UNIQUE [KEY| DISTINCT [KEY| PRIMARY ​[KEY] [FOREIGN [KEY]]  +===== Table Constraints =====
-                   REFERENCES table(column[,​ column …]) [PREJOIN]>​]+
  
-/* Inline Omnidex custom index options */ +The CREATE TABLE statement specifies the constraints for a table.  The most common constraints are primary and foreign constraints,​ used to declare parent-child relationships between tables. ​ Omnidex allows constraints to be declared on both relational tables and raw data files, allowing either to be described using a full relational model. ​ Omnidex allows these constraints to be declared, but it does not verify or enforce these constraints. ​
-               ​[KEYWORDING] [PROXIMITY] [<​CASE_INSENSITIVE | CASE_SENSITIVE>​][STANDALONE] +
-               ​[BITMAP][EXCLUDED_WORDS][PHONETIC] +
-               ​[PREJOIN ​table][<​RECORD_SPECIFIC | RECORD_COMPLEX>​]]+
  
-/* Inline ​Omnidex ​pseudo or derived columns */           +===== Omnidex ​Indexing =====
-         [AS “select_item”]+
  
-/* Separately defined Constraints and Omnidex ​Indexes */  +Like most databases, ​Omnidex ​allows indexes to be declared using the CREATE INDEX statement. ​ For convenienceOmnidex also allows indexes to be declared using the CREATE TABLE statement. ​ In most applicationsmany (if not allof the columns are indexed with Omnidexso it is convenient to declare the indexing directly in the table specification. ​ 
-    [[,] [CONSTRAINT constraint] +===== Inlining =====
-            <UNIQUE [KEY] (column [column …]) | +
-           ​DISTINCT [KEY] (column [, column …]+
-           ​PRIMARY [KEY] (column [column …]) | +
-           FOREIGN [KEY] (column [, column …])  +
-               ​REFERENCES table(column [, column …] [PREJOIN]>​]+
  
-    [[,] <OMNIDEX | QUICKTEXT | FULLTEXT | CUSTOM | NATIVE> [INDEX] index +Omnidex ​allows constraints ​and indexing to be declared alongside each column.  ​With inlining, ​the constraint ​and indexing specification is provided as each column ​is declared. ​This is a convenience for simple ​installations where most constraints and indexes consist of a single column
-      (<column | substring>​ [, <column | substring>​…]) +
-      [KEYWORDING] [PROXIMITY] [ <​CASE_INSENSITIVE | CASE_SENSITIVE>​ ] +
-      [STANDALONE][BITMAP][EXCLUDED_WORDS][PHONETIC] +
-      [PREJOIN table][<​RECORD_SPECIFIC | RECORD_COMPLEX>​]] +
-/* place the column in an Omnidex ​index group */ +
-      [[,] INDEX GROUP [(owner)]group (index, index [, index ...]) +
-    )] +
-    [AS “sql_statement”] +
- +
-/* Specifics the physical Omnidex Environment file- this is the same as in the  +
-/* CREATE DATABASE ​and CREATE TABLE statements.  ​This has to be the last clause */ +
-    [< IN “filename” | ON [INSTANCE] instance >]    +
- +
-    [WITH options] +
-</​code>​  +
- +
-===== Discussion ===== +
- +
-CREATE ENVIRONMENT ​and CREATE DATABASE have to be specified before specifying CREATE TABLE. +
- +
-The IN "​filespec.xml"​ clause has to be specified after the column ​definitions. +
- +
-Tables must be declared ​in order of their constraints  +
- +
-Parent tables should be declared before children tables. +
- +
-===== Examples ===== +
-==== Simple CREATE TABLE with no Omnidex Indexing specified ==== +
-<​code>​ +
-create table "​HOUSEHOLDS"​ +
-  physical ​  "​dat\households*.dat"​ +
-  ( +
-   "​HOUSEHOLD" ​   character(12),​ +
-   "​ADDRESS" ​     character(50),​ +
-   "​CITY" ​        ​character(28),​ +
-   "​STATE" ​       character(2),​ +
-   "​ZIP" ​         character(5),​ +
-   "​COUNTRY" ​     character(2),​ +
-   ​constraint HOUSEHOLD_HOUSEHOLD_PK primay ("​HOUSEHOLD"​),​ +
-   ​constraint HOUSEHOLD_STATE_fk FOREIGN ("​STATE"​) references "​states",​ +
-   ​constraint HOUSEHOLDS_COUNTRY_FK foreign ("​COUNTRY"​) references "​COUNTRIES"​ +
-  ) +
- in "simple.xml";​ +
- </​code>  ​+
   ​   ​
  
-==== CREATE TABLE with Omnidex Indexing specified inline with the columns ​====+====== ​Additional Resources ​====== 
 +See also:  
 +  * [[dev:​sql:​statements:​create_environment:​home|CREATE ENVIRONMENT]] 
 +  * [[dev:​sql:​statements:​create_database:​home|CREATE DATABASE]] 
 +  * [[dev:​sql:​statements:​create_index:​home|CREATE INDEX]] 
 +  * [[dev:​sql:​statements:​update_indexes:​home|UPDATE INDEXES]]
  
-Here is the same CREATE TABLE statement as above but with the Omnidex Index type specified for each column.+Articles:
  
-<​code>​ +  * [[admin:​indexing:​home|Indexing Strategies]] 
-create table "​HOUSEHOLDS"​ +  ​* [[dev:​appendix:​articles:​dbspe|Database-specific issues]] 
-  physical ​  ​"​dat\households*.dat" +  ​* [[admin:​features:​rollups:​home|Rollup Tables]]
-  ​( +
-   "​HOUSEHOLD" ​   character(12) ​    ​omnidex,​ +
-   "​ADDRESS" ​     character(50) ​    ​quicktext,​ +
-   "​CITY" ​        ​character(28) ​    ​quicktext,​ +
-   "​STATE" ​       character(2) ​     omnidex, +
-   "​ZIP" ​         character(5) ​     omnidex, +
-   "​COUNTRY" ​     character(2) ​     omnidex, +
-   ​constraint HOUSEHOLD_HOUSEHOLD_PK primay ("​HOUSEHOLD"​),​ +
-   ​constraint HOUSEHOLD_STATE_fk FOREIGN ("​STATE"​) references "​states",​ +
-   ​constraint HOUSEHOLDS_COUNTRY_FK foreign ("​COUNTRY"​) references "​COUNTRIES"​ +
- ) +
- in "​simple.xml";​ +
- </​code> ​  +
-==== CREATE TABLE with an Omnidex Composite Index ====+
  
-Here is the same CREATE TABLE statement as above but with the Omnidex Index type specified for each column. 
  
-Additionally,​ it creates an Omnidex Composite index and combines the STATE and CITY columns into a single index. 
- 
-<​code>​ 
-create table "​HOUSEHOLDS"​ 
-  physical ​  "​dat\households*.dat"​ 
-  ( 
-   "​HOUSEHOLD" ​   character(12) ​    ​omnidex,​ 
-   "​ADDRESS" ​     character(50) ​    ​quicktext,​ 
-   "​CITY" ​        ​character(28) ​    ​quicktext,​ 
-   "​STATE" ​       character(2) ​     omnidex, 
-   "​ZIP" ​         character(5) ​     omnidex, 
-   "​COUNTRY" ​     character(2) ​     omnidex, 
-   ​constraint HOUSEHOLD_HOUSEHOLD_PK primay ("​HOUSEHOLD"​),​ 
-   ​constraint HOUSEHOLD_STATE_fk FOREIGN ("​STATE"​) references "​states",​ 
-   ​constraint HOUSEHOLDS_COUNTRY_FK foreign ("​COUNTRY"​) references "​COUNTRIES"​ 
-   ​omnidex index "​HSHD_STATE_CITY"​ ("​STATE","​CITY"​) 
- ) 
- in "​simple.xml";​ 
- </​code>  ​ 
-==== Types of Omnidex Indexes ==== 
- 
-There are three types of Omnidex indexes called Omnidex, QuickText, and FullText. 
- 
-The following table shows the key types of retrieval properties of these Omnidex index types. 
- 
-^                        ^  Omnidex ​  ​^ ​ QuickText ​ ^ FullText ^ Custom ^ 
-^ Criteria ​              ​| ​  ​Yes ​     |   ​Yes ​      ​| ​ Yes     | | 
-^ Counts ​                ​| ​  ​Yes ​     |   ​Yes ​      ​| ​ Yes     | | 
-^ Sum, Average, Min, Max |   ​Yes ​     |   ​No ​       |  No      | | 
-^ Table Joins            |   ​Yes ​     |   ​No ​       |  No      | | 
-^ Group By               ​| ​  ​Yes ​     |   ​No ​       |  No      | | 
-^ Order By               ​| ​  ​Yes ​     |   ​No ​       |  No      | | 
-^ Geographic Searches ​   |   ​Yes ​     |   ​No ​       |  No      | | 
-^ Textual Searches ​      ​| ​  ​No ​      ​| ​  ​Yes ​      ​| ​ Yes     | | 
-^ Proximity Searches ​    ​| ​  ​No ​      ​| ​  ​No ​       |  Yes     | | 
-^ Relevancy Scoring ​     |   ​No ​      ​| ​  ​No ​       |  Yes     | | 
-^ Indexing Overhead ​     |   ​Low ​     |   ​Low ​      ​| ​ High    | | 
- 
-In addition to the three basic Omnidex Index Types: Omnidex, QuickText, and FullText, there is a Custom Index Type that can be used to specify advanced indexing options. 
- 
- 
-==== Column Data Types ==== 
-^Number ^ Data Type ^ Length ^ 
-| CHAR(ACTER) |# of characters| 
-| C STRING ​ |# of characters| 
-| VARCHAR |# of characters| 
-|CLOB|# of characters| 
-|NCHAR|# of characters * 2| 
-| NC STRING | # of characters | 
-| NVARCHAR | # of characters | 
-| NCLOB |(# of characters | 
-| OMNIDEX VARCHAR | # of characters | 
-| OMNIDEX CLOB | # of characters | 
-| [SIGNED] TINYINT | 1 | 
-| UNSIGNED TINYINT | 1 | 
-| [SIGNED] SMALLINT | 2 | 
-| UNSIGNED SMALLINT | 2 | 
-| [SIGNED] INTEGER | 1, 2, 4, 8 | 
-| UNSIGNED INTEGER | 1, 2, 4, 8 | 
-| [SIGNED] BIGINT | 8 | 
-| UNSIGNED BIGINT | 8 | 
-| FLOAT | 4, 8 | 
-| DOUBLE | 8 | 
-| DATE | 10 | 
-|ODBC DATE | 6 | 
-| DB2 DATE | 6 | 
-|INFORMIX DATE | 4 | 
-| ASCII DATE | 6, 8 | 6, 8 (optional, default 8) | 
-|OMNIDEX DATE | 1 - 4 | 2 - 8 (optional, default 8) | 
-| TIME | 11 | 
-| ODBC TIME | 6 | 
-| DB2 | TIME 6 | 
-| OMNIDEX TIME | 1 - 4 | 2 - 8 (optional, default 8) | 
-| DATETIME | 22 |  
-| ORACLE DATETIME | 7 | 
-| ODBC DATETIME | 6 | 
-| DB2 DATETIME | 16 | 
-| INFORMIX DATETIME | 24 | 
-| C DATETIME | 4 | 
-| OMNIDEX DATETIME | 1 - 8 | 2 - 16 (optional, default 16) | 
-| BLOB | # of bytes | 
-| OMNIDEX BLOB | # of bytes | 
-==== Indexing Recommendations ==== 
- 
-  - Generally Omnidex indexes should be put on the Parent primary key and the child foreign key. 
-  - Create a composite index for group bys of multiple columns. 
-  - Create a composite index of all group by columns plus the aggregate columns. 
-  - Create a composite index of group bys in order of reduced cardinality 
-  - consider a catch all index of all group by and metric columns 
-  - add a foreign key to the composite index when grouping on a column in the snowflaked table. 
-  ​ 
 {{page>:​bottom_add&​nofooter&​noeditbtn}} {{page>:​bottom_add&​nofooter&​noeditbtn}}
 
Back to top
dev/sql/statements/create_table/home.1274456009.txt.gz · Last modified: 2016/06/28 22:38 (external edit)