blob: 975631aa17a90f48f5b6f02354ae9edccc10626f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.phoenix.query;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.phoenix.coprocessor.MetaDataProtocol;
import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
import org.apache.phoenix.monitoring.MetricType;
import org.apache.phoenix.schema.MetaDataSplitPolicy;
import org.apache.phoenix.schema.PName;
import org.apache.phoenix.schema.PNameFactory;
import org.apache.phoenix.schema.PTable.ImmutableStorageScheme;
import org.apache.phoenix.schema.PTable.QualifierEncodingScheme;
import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.SystemFunctionSplitPolicy;
import org.apache.phoenix.schema.SystemStatsSplitPolicy;
import org.apache.phoenix.schema.SystemTaskSplitPolicy;
import org.apache.phoenix.schema.TableProperty;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.APPEND_ONLY_SCHEMA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ARG_POSITION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ARRAY_SIZE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.AUTO_PARTITION_SEQ;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.BASE_COLUMN_COUNT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.BIND_PARAMETERS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.BUFFER_LENGTH;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CACHE_SIZE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CDC_INCLUDE_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CHANGE_DETECTION_ENABLED;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CHAR_OCTET_LENGTH;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CLASS_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CLIENT_IP;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_COUNT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_DEF;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_FAMILY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_QUALIFIER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_QUALIFIER_COUNTER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_SIZE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CURRENT_VALUE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.CYCLE_FLAG;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DATA_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DATA_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DECIMAL_DIGITS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DEFAULT_COLUMN_FAMILY_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DEFAULT_VALUE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DISABLE_WAL;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ENCODING_SCHEME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.EXCEPTION_TRACE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.EXPLAIN_PLAN;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.EXTERNAL_SCHEMA_ID;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.FUNCTION_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.GLOBAL_SCAN_DETAILS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.GUIDE_POSTS_ROW_COUNT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.GUIDE_POSTS_WIDTH;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.GUIDE_POST_KEY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IMMUTABLE_ROWS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IMMUTABLE_STORAGE_SCHEME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.INCREMENT_BY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.INDEX_DISABLE_TIMESTAMP;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.INDEX_STATE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.INDEX_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.INDEX_WHERE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_ARRAY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_AUTOINCREMENT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_CONSTANT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_NAMESPACE_MAPPED;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_NULLABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_ROW_TIMESTAMP;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.IS_VIEW_REFERENCED;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.JAR_PATH;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.KEY_SEQ;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LAST_DDL_TIMESTAMP;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LAST_STATS_UPDATE_TIME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LIMIT_REACHED_FLAG;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LINK_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LOGICAL_PARENT_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.LOGICAL_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.MAX_VALUE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.MIN_VALUE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.MULTI_TENANT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NEW_METADATA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NEW_PHYS_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NO_OF_RESULTS_ITERATED;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NULLABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NUM_ARGS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.NUM_PREC_RADIX;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.OLD_METADATA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ORDINAL_POSITION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHOENIX_TTL;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHOENIX_TTL_HWM;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PHYSICAL_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.PK_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.QUERY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.QUERY_ID;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.QUERY_STATUS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.REF_GENERATION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.REMARKS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.RETURN_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SALT_BUCKETS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCAN_METRICS_JSON;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCHEMA_VERSION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCOPE_CATALOG;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCOPE_SCHEMA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SCOPE_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SELF_REFERENCING_COL_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SEQUENCE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SEQUENCE_SCHEMA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SORT_ORDER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SOURCE_DATA_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SQL_DATA_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SQL_DATETIME_SUB;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.START_TIME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.START_WITH;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.STORE_NULLS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.STREAMING_TOPIC_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CATALOG_SCHEMA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CATALOG_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CHILD_LINK_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_FUNCTION_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_LOG_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_MUTEX_TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_STATS_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_TASK_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_TRANSFORM_TABLE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SCHEM;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SEQ_NUM;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_DATA;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_END_TS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_PRIORITY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_STATUS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_TABLE_TTL;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_TS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TASK_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TENANT_ID;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSACTIONAL;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSACTION_PROVIDER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_FUNCTION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_JOB_ID;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_LAST_STATE_TS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_RETRY_COUNT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_START_TS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_STATUS;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_TABLE_TTL;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TRANSFORM_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TTL_FOR_MUTEX;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TYPE_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TYPE_SEQUENCE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.UPDATE_CACHE_FREQUENCY;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.USER;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.USE_STATS_FOR_PARALLELIZATION;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_CONSTANT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_INDEX_ID;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_INDEX_ID_DATA_TYPE;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_STATEMENT;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_TYPE;
/**
*
* Constants used during querying
*
*
* @since 0.1
*/
public interface QueryConstants {
String NAME_SEPARATOR = ".";
String NAMESPACE_SEPARATOR = ":";
String CHILD_VIEW_INDEX_NAME_SEPARATOR = "#";
byte[] NAMESPACE_SEPARATOR_BYTES = Bytes.toBytes(NAMESPACE_SEPARATOR);
byte NAMESPACE_SEPARATOR_BYTE = NAMESPACE_SEPARATOR_BYTES[0];
String NAME_SEPARATOR_REGEX = "\\" + NAME_SEPARATOR;
byte[] NAME_SEPARATOR_BYTES = Bytes.toBytes(NAME_SEPARATOR);
byte NAME_SEPARATOR_BYTE = NAME_SEPARATOR_BYTES[0];
String NULL_DISPLAY_TEXT = "<null>";
long UNSET_TIMESTAMP = -1;
enum JoinType {INNER, LEFT_OUTER}
String SYSTEM_SCHEMA_NAME = "SYSTEM";
byte[] SYSTEM_SCHEMA_NAME_BYTES = Bytes.toBytes(SYSTEM_SCHEMA_NAME);
String OFFSET_ROW_KEY = "_OFFSET_";
byte[] OFFSET_ROW_KEY_BYTES = Bytes.toBytes(OFFSET_ROW_KEY);
ImmutableBytesPtr OFFSET_ROW_KEY_PTR = new ImmutableBytesPtr(OFFSET_ROW_KEY_BYTES);
long AGG_TIMESTAMP = HConstants.LATEST_TIMESTAMP;
/**
* Key used for a single row aggregation where there is no group by
*/
byte[] UNGROUPED_AGG_ROW_KEY = Bytes.toBytes("a");
/** BEGIN Set of reserved column qualifiers **/
String RESERVED_COLUMN_FAMILY = "_v";
byte[] RESERVED_COLUMN_FAMILY_BYTES = Bytes.toBytes(RESERVED_COLUMN_FAMILY);
byte[] VALUE_COLUMN_FAMILY = RESERVED_COLUMN_FAMILY_BYTES;
byte[] VALUE_COLUMN_QUALIFIER = QualifierEncodingScheme.FOUR_BYTE_QUALIFIERS.encode(1);
byte[] ARRAY_VALUE_COLUMN_FAMILY = RESERVED_COLUMN_FAMILY_BYTES;
byte[] ARRAY_VALUE_COLUMN_QUALIFIER = QualifierEncodingScheme.FOUR_BYTE_QUALIFIERS.encode(2);
PName SINGLE_COLUMN_NAME = PNameFactory.newNormalizedName("s");
PName SINGLE_COLUMN_FAMILY_NAME = PNameFactory.newNormalizedName("s");
byte[] SINGLE_COLUMN = SINGLE_COLUMN_NAME.getBytes();
byte[] SINGLE_COLUMN_FAMILY = SINGLE_COLUMN_FAMILY_NAME.getBytes();
/** END Set of reserved column qualifiers **/
byte[] TRUE = new byte[] {1};
/**
* The priority property for an hbase table. This is already in HTD, but older versions of
* HBase do not have this, so we re-defined it here. Once Phoenix is HBase-1.3+, we can remote.
*/
String PRIORITY = "PRIORITY";
/**
* Separator used between variable length keys for a composite key.
* Variable length data types may not use this byte value.
*/
byte SEPARATOR_BYTE = (byte) 0;
byte[] SEPARATOR_BYTE_ARRAY = new byte[] {SEPARATOR_BYTE};
byte DESC_SEPARATOR_BYTE = SortOrder.invert(SEPARATOR_BYTE);
byte[] DESC_SEPARATOR_BYTE_ARRAY = new byte[] {DESC_SEPARATOR_BYTE};
String DEFAULT_COPROCESS_JAR_NAME = "phoenix-[version]-server.jar";
int MILLIS_IN_DAY = 1000 * 60 * 60 * 24;
String EMPTY_COLUMN_NAME = "_0";
// For transactional tables, the value of our empty key value can no longer be empty
// since empty values are treated as column delete markers.
byte[] EMPTY_COLUMN_BYTES = Bytes.toBytes(EMPTY_COLUMN_NAME);
ImmutableBytesPtr EMPTY_COLUMN_BYTES_PTR = new ImmutableBytesPtr(EMPTY_COLUMN_BYTES);
Integer ENCODED_EMPTY_COLUMN_NAME = 0;
byte[] ENCODED_EMPTY_COLUMN_BYTES = QualifierEncodingScheme.FOUR_BYTE_QUALIFIERS.encode(
ENCODED_EMPTY_COLUMN_NAME);
String EMPTY_COLUMN_VALUE = "x";
byte[] EMPTY_COLUMN_VALUE_BYTES = Bytes.toBytes(EMPTY_COLUMN_VALUE);
ImmutableBytesPtr EMPTY_COLUMN_VALUE_BYTES_PTR = new ImmutableBytesPtr(
EMPTY_COLUMN_VALUE_BYTES);
byte[] ENCODED_EMPTY_COLUMN_VALUE_BYTES = Bytes.toBytes(EMPTY_COLUMN_VALUE);
String DEFAULT_COLUMN_FAMILY = "0";
byte[] DEFAULT_COLUMN_FAMILY_BYTES = Bytes.toBytes(DEFAULT_COLUMN_FAMILY);
ImmutableBytesPtr DEFAULT_COLUMN_FAMILY_BYTES_PTR = new ImmutableBytesPtr(
DEFAULT_COLUMN_FAMILY_BYTES);
byte VERIFIED_BYTE = 1;
byte UNVERIFIED_BYTE = 2;
byte[] VERIFIED_BYTES = new byte[] { VERIFIED_BYTE };
byte[] UNVERIFIED_BYTES = new byte[] { UNVERIFIED_BYTE };
ImmutableBytesPtr VERIFIED_BYTES_PTR = new ImmutableBytesPtr(VERIFIED_BYTES);
ImmutableBytesPtr UNVERIFIED_BYTES_PTR = new ImmutableBytesPtr(UNVERIFIED_BYTES);
// column qualifier of the single key value used to store all columns for the
// COLUMNS_STORED_IN_SINGLE_CELL storage scheme
String SINGLE_KEYVALUE_COLUMN_QUALIFIER = "1";
byte[] SINGLE_KEYVALUE_COLUMN_QUALIFIER_BYTES = Bytes.toBytes(SINGLE_KEYVALUE_COLUMN_QUALIFIER);
ImmutableBytesPtr SINGLE_KEYVALUE_COLUMN_QUALIFIER_BYTES_PTR = new ImmutableBytesPtr(
SINGLE_KEYVALUE_COLUMN_QUALIFIER_BYTES);
String LOCAL_INDEX_COLUMN_FAMILY_PREFIX = "L#";
byte[] LOCAL_INDEX_COLUMN_FAMILY_PREFIX_BYTES = Bytes.toBytes(LOCAL_INDEX_COLUMN_FAMILY_PREFIX);
String DEFAULT_LOCAL_INDEX_COLUMN_FAMILY = LOCAL_INDEX_COLUMN_FAMILY_PREFIX +
DEFAULT_COLUMN_FAMILY;
byte[] DEFAULT_LOCAL_INDEX_COLUMN_FAMILY_BYTES = Bytes.toBytes(
DEFAULT_LOCAL_INDEX_COLUMN_FAMILY);
ImmutableBytesPtr DEFAULT_LOCAL_INDEX_COLUMN_FAMILY_BYTES_PTR = new ImmutableBytesPtr(
DEFAULT_LOCAL_INDEX_COLUMN_FAMILY_BYTES);
String ALL_FAMILY_PROPERTIES_KEY = "";
String SYSTEM_TABLE_PK_NAME = "pk";
double MILLIS_TO_NANOS_CONVERTOR = Math.pow(10, 6);
BigDecimal BD_MILLIS_NANOS_CONVERSION = BigDecimal.valueOf(MILLIS_TO_NANOS_CONVERTOR);
BigDecimal BD_MILLIS_IN_DAY = BigDecimal.valueOf(QueryConstants.MILLIS_IN_DAY);
int MAX_ALLOWED_NANOS = 999999999;
int DIVERGED_VIEW_BASE_COLUMN_COUNT = -100;
int BASE_TABLE_BASE_COLUMN_COUNT = -1;
// custom TagType
byte VIEW_MODIFIED_PROPERTY_TAG_TYPE = (byte) 70;
String CDC_JSON_COL_NAME = "CDC JSON";
String CDC_EVENT_TYPE = "event_type";
String CDC_PRE_IMAGE = "pre_image";
String CDC_POST_IMAGE = "post_image";
String CDC_CHANGE_IMAGE = "change_image";
String CDC_UPSERT_EVENT_TYPE = "upsert";
String CDC_DELETE_EVENT_TYPE = "delete";
/**
* We mark counter values 0 to 10 as reserved. Value 0 is used by
* {@link #ENCODED_EMPTY_COLUMN_NAME}. Values 1-10
* are reserved for special column qualifiers returned by Phoenix co-processors.
*/
int ENCODED_CQ_COUNTER_INITIAL_VALUE = 11;
String CREATE_TABLE_METADATA =
// Do not use IF NOT EXISTS as we sometimes catch the TableAlreadyExists
// exception and add columns to the SYSTEM.TABLE dynamically.
"CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_CATALOG_TABLE + "\"(\n" +
// PK columns
TENANT_ID + " VARCHAR NULL," +
TABLE_SCHEM + " VARCHAR NULL," +
TABLE_NAME + " VARCHAR NOT NULL," +
COLUMN_NAME + " VARCHAR NULL," + // null for table row
COLUMN_FAMILY + " VARCHAR NULL," + // using for CF to uniqueness for columns
// Table metadata (will be null for column rows)
TABLE_SEQ_NUM + " BIGINT," +
TABLE_TYPE + " CHAR(1)," +
PK_NAME + " VARCHAR," +
COLUMN_COUNT + " INTEGER," +
SALT_BUCKETS + " INTEGER," +
DATA_TABLE_NAME + " VARCHAR," +
INDEX_STATE + " CHAR(1),\n" +
IMMUTABLE_ROWS + " BOOLEAN,\n" +
VIEW_STATEMENT + " VARCHAR,\n" +
DEFAULT_COLUMN_FAMILY_NAME + " VARCHAR,\n" +
DISABLE_WAL + " BOOLEAN,\n" +
MULTI_TENANT + " BOOLEAN,\n" +
VIEW_TYPE + " UNSIGNED_TINYINT,\n" +
VIEW_INDEX_ID + " BIGINT,\n" +
VIEW_INDEX_ID_DATA_TYPE + " INTEGER,\n" +
PHOENIX_TTL + " BIGINT,\n" +
PHOENIX_TTL_HWM + " BIGINT,\n" +
LAST_DDL_TIMESTAMP + " BIGINT, \n" +
CHANGE_DETECTION_ENABLED + " BOOLEAN, \n" +
SCHEMA_VERSION + " VARCHAR, \n" +
EXTERNAL_SCHEMA_ID + " VARCHAR, \n" +
STREAMING_TOPIC_NAME + " VARCHAR, \n" +
INDEX_WHERE + " VARCHAR, \n" +
CDC_INCLUDE_TABLE + " VARCHAR, \n" +
// Column metadata (will be null for table row)
DATA_TYPE + " INTEGER," +
COLUMN_SIZE + " INTEGER," +
DECIMAL_DIGITS + " INTEGER," +
NULLABLE + " INTEGER," +
ORDINAL_POSITION + " INTEGER," +
SORT_ORDER + " INTEGER," +
ARRAY_SIZE + " INTEGER,\n" +
VIEW_CONSTANT + " VARBINARY,\n" +
IS_VIEW_REFERENCED + " BOOLEAN,\n" +
KEY_SEQ + " SMALLINT,\n" +
// Link metadata (only set on rows linking table to index or view)
LINK_TYPE + " UNSIGNED_TINYINT,\n" +
// Unused
TYPE_NAME + " VARCHAR," +
REMARKS + " VARCHAR," +
SELF_REFERENCING_COL_NAME + " VARCHAR," +
REF_GENERATION + " VARCHAR," +
BUFFER_LENGTH + " INTEGER," +
NUM_PREC_RADIX + " INTEGER," +
COLUMN_DEF + " VARCHAR," +
SQL_DATA_TYPE + " INTEGER," +
SQL_DATETIME_SUB + " INTEGER," +
CHAR_OCTET_LENGTH + " INTEGER," +
IS_NULLABLE + " VARCHAR," +
SCOPE_CATALOG + " VARCHAR," +
SCOPE_SCHEMA + " VARCHAR," +
SCOPE_TABLE + " VARCHAR," +
SOURCE_DATA_TYPE + " SMALLINT," +
IS_AUTOINCREMENT + " VARCHAR," +
INDEX_TYPE + " UNSIGNED_TINYINT," +
INDEX_DISABLE_TIMESTAMP + " BIGINT," +
STORE_NULLS + " BOOLEAN," +
BASE_COLUMN_COUNT + " INTEGER," +
// Column metadata (will be null for table row)
IS_ROW_TIMESTAMP + " BOOLEAN, " +
TRANSACTIONAL + " BOOLEAN," +
UPDATE_CACHE_FREQUENCY + " BIGINT," +
IS_NAMESPACE_MAPPED + " BOOLEAN," +
AUTO_PARTITION_SEQ + " VARCHAR," +
APPEND_ONLY_SCHEMA + " BOOLEAN," +
GUIDE_POSTS_WIDTH + " BIGINT," +
COLUMN_QUALIFIER + " VARBINARY," +
IMMUTABLE_STORAGE_SCHEME + " TINYINT, " +
ENCODING_SCHEME + " TINYINT, " +
COLUMN_QUALIFIER_COUNTER + " INTEGER, " +
USE_STATS_FOR_PARALLELIZATION + " BOOLEAN, " +
TRANSACTION_PROVIDER + " TINYINT, " +
PHYSICAL_TABLE_NAME + " VARCHAR," +
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" + TENANT_ID + ","
+ TABLE_SCHEM + "," + TABLE_NAME + "," + COLUMN_NAME + "," + COLUMN_FAMILY + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n" +
// Install split policy to prevent a tenant's metadata from being split across regions.
TableDescriptorBuilder.SPLIT_POLICY + "='" + MetaDataSplitPolicy.class.getName() +
"',\n" + TRANSACTIONAL + "=" + Boolean.FALSE;
String CREATE_STATS_TABLE_METADATA =
"CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_STATS_TABLE + "\"(\n" +
// PK columns
PHYSICAL_NAME + " VARCHAR NOT NULL," +
COLUMN_FAMILY + " VARCHAR," +
GUIDE_POST_KEY + " VARBINARY," +
GUIDE_POSTS_WIDTH + " BIGINT," +
LAST_STATS_UPDATE_TIME+ " DATE, "+
GUIDE_POSTS_ROW_COUNT+ " BIGINT, "+
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY ("
+ PHYSICAL_NAME + ","
+ COLUMN_FAMILY + ","+ GUIDE_POST_KEY+"))\n" +
// Install split policy to prevent a physical table's stats from being split
// across regions.
TableDescriptorBuilder.SPLIT_POLICY + "='" + SystemStatsSplitPolicy.class.getName() + "',\n" +
TRANSACTIONAL + "=" + Boolean.FALSE;
String CREATE_SEQUENCE_METADATA =
"CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + TYPE_SEQUENCE + "\"(\n" +
TENANT_ID + " VARCHAR NULL," +
SEQUENCE_SCHEMA + " VARCHAR NULL, \n" +
SEQUENCE_NAME + " VARCHAR NOT NULL, \n" +
START_WITH + " BIGINT, \n" +
CURRENT_VALUE + " BIGINT, \n" +
INCREMENT_BY + " BIGINT, \n" +
CACHE_SIZE + " BIGINT, \n" +
// the following three columns were added in 3.1/4.1
MIN_VALUE + " BIGINT, \n" +
MAX_VALUE + " BIGINT, \n" +
CYCLE_FLAG + " BOOLEAN, \n" +
LIMIT_REACHED_FLAG + " BOOLEAN \n" +
" CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" +
TENANT_ID + "," + SEQUENCE_SCHEMA + "," + SEQUENCE_NAME + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n"+
TRANSACTIONAL + "=" + Boolean.FALSE;
String UPGRADE_TABLE_SNAPSHOT_PREFIX = "_UPGRADING_TABLE_";
String CREATE_FUNCTION_METADATA =
"CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_FUNCTION_TABLE + "\"(\n" +
// Pk columns
TENANT_ID + " VARCHAR NULL," +
FUNCTION_NAME + " VARCHAR NOT NULL, \n" +
NUM_ARGS + " INTEGER, \n" +
// Function metadata (will be null for argument row)
CLASS_NAME + " VARCHAR, \n" +
JAR_PATH + " VARCHAR, \n" +
RETURN_TYPE + " VARCHAR, \n" +
// Argument metadata (will be null for function row)
TYPE + " VARCHAR, \n" +
ARG_POSITION + " VARBINARY, \n" +
IS_ARRAY + " BOOLEAN, \n" +
IS_CONSTANT + " BOOLEAN, \n" +
DEFAULT_VALUE + " VARCHAR, \n" +
MIN_VALUE + " VARCHAR, \n" +
MAX_VALUE + " VARCHAR, \n" +
" CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" + TENANT_ID + ", " +
FUNCTION_NAME + ", " + TYPE + ", " + ARG_POSITION + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n"+
// Install split policy to prevent a tenant's metadata from being split across regions.
TableDescriptorBuilder.SPLIT_POLICY + "='" + SystemFunctionSplitPolicy.class.getName() +
"',\n" + TRANSACTIONAL + "=" + Boolean.FALSE;
String CREATE_LOG_METADATA =
"CREATE IMMUTABLE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\"(\n" +
// Pk columns
START_TIME + " DECIMAL, \n" +
TABLE_NAME + " VARCHAR, \n" +
QUERY_ID + " VARCHAR NOT NULL,\n" +
TENANT_ID + " VARCHAR ," +
USER + " VARCHAR , \n" +
CLIENT_IP + " VARCHAR, \n" +
// Function metadata (will be null for argument row)
QUERY + " VARCHAR, \n" +
EXPLAIN_PLAN + " VARCHAR, \n" +
// Argument metadata (will be null for function row)
NO_OF_RESULTS_ITERATED + " BIGINT, \n" +
QUERY_STATUS + " VARCHAR, \n" +
EXCEPTION_TRACE + " VARCHAR, \n" +
GLOBAL_SCAN_DETAILS + " VARCHAR, \n" +
BIND_PARAMETERS + " VARCHAR, \n" +
SCAN_METRICS_JSON + " VARCHAR, \n" +
MetricType.getMetricColumnsDetails()+"\n"+
" CONSTRAINT " + SYSTEM_TABLE_PK_NAME +
" PRIMARY KEY (START_TIME, TABLE_NAME, QUERY_ID))\n" +
SALT_BUCKETS + "=%s,\n"+
TRANSACTIONAL + "=" + Boolean.FALSE+ ",\n" +
ColumnFamilyDescriptorBuilder.TTL + "=" + MetaDataProtocol.DEFAULT_LOG_TTL+",\n"+
TableProperty.IMMUTABLE_STORAGE_SCHEME.toString() + " = " +
ImmutableStorageScheme.SINGLE_CELL_ARRAY_WITH_OFFSETS.name() + ",\n" +
TableProperty.COLUMN_ENCODED_BYTES.toString()+" = 1";
byte[] OFFSET_FAMILY = "f_offset".getBytes(StandardCharsets.UTF_8);
byte[] OFFSET_COLUMN = "c_offset".getBytes(StandardCharsets.UTF_8);
String LAST_SCAN = "LAST_SCAN";
String HASH_JOIN_CACHE_RETRIES = "hashjoin.client.retries.number";
int DEFAULT_HASH_JOIN_CACHE_RETRIES = 5;
// Links from parent to child views are stored in a separate table for
// scalability
String CREATE_CHILD_LINK_METADATA = "CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" +
SYSTEM_CHILD_LINK_TABLE + "\"(\n" +
// PK columns
TENANT_ID + " VARCHAR NULL," +
TABLE_SCHEM + " VARCHAR NULL," +
TABLE_NAME + " VARCHAR NOT NULL," +
COLUMN_NAME + " VARCHAR NULL," +
COLUMN_FAMILY + " VARCHAR NULL," +
LINK_TYPE + " UNSIGNED_TINYINT,\n" +
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" +
TENANT_ID + "," + TABLE_SCHEM + "," + TABLE_NAME + "," +
COLUMN_NAME + "," + COLUMN_FAMILY + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n" +
TRANSACTIONAL + "=" + Boolean.FALSE;
String CREATE_MUTEX_METADATA =
"CREATE IMMUTABLE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" +
SYSTEM_MUTEX_TABLE_NAME + "\"(\n" +
// Pk columns
TENANT_ID + " VARCHAR NULL," +
TABLE_SCHEM + " VARCHAR NULL," +
TABLE_NAME + " VARCHAR NOT NULL," +
COLUMN_NAME + " VARCHAR NULL," + // null for table row
COLUMN_FAMILY + " VARCHAR NULL " + // using for CF to uniqueness for columns
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" + TENANT_ID + "," +
TABLE_SCHEM + "," + TABLE_NAME + "," + COLUMN_NAME + "," + COLUMN_FAMILY + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n" +
TRANSACTIONAL + "=" + Boolean.FALSE + ",\n" +
ColumnFamilyDescriptorBuilder.TTL + "=" + TTL_FOR_MUTEX;
String CREATE_TASK_METADATA =
"CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_TASK_TABLE + "\"(\n" +
// PK columns
TASK_TYPE + " UNSIGNED_TINYINT NOT NULL," +
TASK_TS + " TIMESTAMP NOT NULL," +
TENANT_ID + " VARCHAR NULL," +
TABLE_SCHEM + " VARCHAR NULL," +
TABLE_NAME + " VARCHAR NOT NULL,\n" +
// Non-PK columns
TASK_STATUS + " VARCHAR NULL," +
TASK_END_TS + " TIMESTAMP NULL," +
TASK_PRIORITY + " UNSIGNED_TINYINT NULL," +
TASK_DATA + " VARCHAR NULL,\n" +
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" +
TASK_TYPE + "," + TASK_TS + " ROW_TIMESTAMP," + TENANT_ID + "," + TABLE_SCHEM + "," +
TABLE_NAME + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.TTL + "=" + TASK_TABLE_TTL + ",\n" + // 10 days
TableDescriptorBuilder.SPLIT_POLICY + "='"
+ SystemTaskSplitPolicy.class.getName() + "',\n" +
TRANSACTIONAL + "=" + Boolean.FALSE + ",\n" +
STORE_NULLS + "=" + Boolean.TRUE;
String CREATE_TRANSFORM_METADATA = "CREATE TABLE " + SYSTEM_CATALOG_SCHEMA + ".\""
+ SYSTEM_TRANSFORM_TABLE + "\"(\n" +
// PK columns
TENANT_ID + " VARCHAR NULL,\n" +
TABLE_SCHEM + " VARCHAR NULL," +
LOGICAL_TABLE_NAME + " VARCHAR NOT NULL,\n" +
// Non-PK columns
NEW_PHYS_TABLE_NAME + " VARCHAR,\n" +
TRANSFORM_TYPE + " INTEGER," +
LOGICAL_PARENT_NAME + " VARCHAR NULL,\n" + // If this is an index, Logical_Parent_Name is the data table name. Index name is not unique.
TRANSFORM_STATUS + " VARCHAR NULL," +
TRANSFORM_JOB_ID + " VARCHAR NULL," +
TRANSFORM_RETRY_COUNT + " INTEGER NULL," +
TRANSFORM_START_TS + " TIMESTAMP NULL," +
TRANSFORM_LAST_STATE_TS + " TIMESTAMP NULL," +
OLD_METADATA + " VARBINARY NULL,\n" +
NEW_METADATA + " VARCHAR NULL,\n" +
TRANSFORM_FUNCTION + " VARCHAR NULL\n" +
"CONSTRAINT " + SYSTEM_TABLE_PK_NAME + " PRIMARY KEY (" +
TENANT_ID + "," + TABLE_SCHEM + "," + LOGICAL_TABLE_NAME + "))\n" +
HConstants.VERSIONS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.KEEP_DELETED_CELLS + "=%s,\n" +
ColumnFamilyDescriptorBuilder.TTL + "=" + TRANSFORM_TABLE_TTL + ",\n" + // 90 days
TableDescriptorBuilder.SPLIT_POLICY + "='"
+ SystemTaskSplitPolicy.class.getName() + "',\n" +
TRANSACTIONAL + "=" + Boolean.FALSE + ",\n" +
STORE_NULLS + "=" + Boolean.TRUE;
}