Databricks - Setting up Custom External Hive Metastore in Azure using MSSQL Server

So you want to store you Hive database externally instead of the built-in databricks database? I’m not going to ask why, you have reasons, and there’s official document. But i’ll describe the steps that worked for me.

Create SQL Database

First, you need SQL database, i’m not going to describe how you create it, as there are plenty of online resources.

But important things to note from production experience are:

  • Name your database in lowercase only.
  • Do not use any special characters, i.e. hyphens etc. Name it simple, something like “meta”. There are various bugs in Databricks that do not work well with weird names.
  • Even for production workload, Basic pricing tier is more than enough. It’s only metadata that is stored, traffic is very minimal, and Basic limit of 2gb for metadata is impossible to reach.

Initialise Metastore Database

Ok, once done, you need to create necessary tables for metastore DB. If you have an external connectivity to SQL server, just use any tool to connect to it. If you only have connectivity from databricks itself (corporate firewalls etc.) you can run the following Scala code from the notebook itself.

Cell 1. The DDL Script Definition.

   1val script = """
   2-- Licensed to the Apache Software Foundation (ASF) under one or more
   3-- contributor license agreements.  See the NOTICE file distributed with
   4-- this work for additional information regarding copyright ownership.
   5-- The ASF licenses this file to You under the Apache License, Version 2.0
   6-- (the "License"); you may not use this file except in compliance with
   7-- the License.  You may obtain a copy of the License at
   8--
   9--     http://www.apache.org/licenses/LICENSE-2.0
  10--
  11-- Unless required by applicable law or agreed to in writing, software
  12-- distributed under the License is distributed on an "AS IS" BASIS,
  13-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14-- See the License for the specific language governing permissions and
  15-- limitations under the License.
  16
  17------------------------------------------------------------------
  18-- DataNucleus SchemaTool (ran at 08/04/2014 15:10:15)
  19------------------------------------------------------------------
  20-- Complete schema required for the following classes:-
  21--     org.apache.hadoop.hive.metastore.model.MColumnDescriptor
  22--     org.apache.hadoop.hive.metastore.model.MDBPrivilege
  23--     org.apache.hadoop.hive.metastore.model.MDatabase
  24--     org.apache.hadoop.hive.metastore.model.MDelegationToken
  25--     org.apache.hadoop.hive.metastore.model.MFieldSchema
  26--     org.apache.hadoop.hive.metastore.model.MFunction
  27--     org.apache.hadoop.hive.metastore.model.MGlobalPrivilege
  28--     org.apache.hadoop.hive.metastore.model.MIndex
  29--     org.apache.hadoop.hive.metastore.model.MMasterKey
  30--     org.apache.hadoop.hive.metastore.model.MOrder
  31--     org.apache.hadoop.hive.metastore.model.MPartition
  32--     org.apache.hadoop.hive.metastore.model.MPartitionColumnPrivilege
  33--     org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics
  34--     org.apache.hadoop.hive.metastore.model.MPartitionEvent
  35--     org.apache.hadoop.hive.metastore.model.MPartitionPrivilege
  36--     org.apache.hadoop.hive.metastore.model.MResourceUri
  37--     org.apache.hadoop.hive.metastore.model.MRole
  38--     org.apache.hadoop.hive.metastore.model.MRoleMap
  39--     org.apache.hadoop.hive.metastore.model.MSerDeInfo
  40--     org.apache.hadoop.hive.metastore.model.MStorageDescriptor
  41--     org.apache.hadoop.hive.metastore.model.MStringList
  42--     org.apache.hadoop.hive.metastore.model.MTable
  43--     org.apache.hadoop.hive.metastore.model.MTableColumnPrivilege
  44--     org.apache.hadoop.hive.metastore.model.MTableColumnStatistics
  45--     org.apache.hadoop.hive.metastore.model.MTablePrivilege
  46--     org.apache.hadoop.hive.metastore.model.MType
  47--     org.apache.hadoop.hive.metastore.model.MVersionTable
  48--
  49-- Table MASTER_KEYS for classes [org.apache.hadoop.hive.metastore.model.MMasterKey]
  50CREATE TABLE MASTER_KEYS
  51(
  52    KEY_ID int NOT NULL,
  53    MASTER_KEY nvarchar(767) NULL
  54);
  55
  56ALTER TABLE MASTER_KEYS ADD CONSTRAINT MASTER_KEYS_PK PRIMARY KEY (KEY_ID);
  57
  58-- Table IDXS for classes [org.apache.hadoop.hive.metastore.model.MIndex]
  59CREATE TABLE IDXS
  60(
  61    INDEX_ID bigint NOT NULL,
  62    CREATE_TIME int NOT NULL,
  63    DEFERRED_REBUILD bit NOT NULL,
  64    INDEX_HANDLER_CLASS nvarchar(4000) NULL,
  65    INDEX_NAME nvarchar(128) NULL,
  66    INDEX_TBL_ID bigint NULL,
  67    LAST_ACCESS_TIME int NOT NULL,
  68    ORIG_TBL_ID bigint NULL,
  69    SD_ID bigint NULL
  70);
  71
  72ALTER TABLE IDXS ADD CONSTRAINT IDXS_PK PRIMARY KEY (INDEX_ID);
  73
  74-- Table PART_COL_STATS for classes [org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics]
  75CREATE TABLE PART_COL_STATS
  76(
  77    CS_ID bigint NOT NULL,
  78    AVG_COL_LEN float NULL,
  79    "COLUMN_NAME" nvarchar(767) NOT NULL,
  80    COLUMN_TYPE nvarchar(128) NOT NULL,
  81    DB_NAME nvarchar(128) NOT NULL,
  82    BIG_DECIMAL_HIGH_VALUE nvarchar(255) NULL,
  83    BIG_DECIMAL_LOW_VALUE nvarchar(255) NULL,
  84    DOUBLE_HIGH_VALUE float NULL,
  85    DOUBLE_LOW_VALUE float NULL,
  86    LAST_ANALYZED bigint NOT NULL,
  87    LONG_HIGH_VALUE bigint NULL,
  88    LONG_LOW_VALUE bigint NULL,
  89    MAX_COL_LEN bigint NULL,
  90    NUM_DISTINCTS bigint NULL,
  91    NUM_FALSES bigint NULL,
  92    NUM_NULLS bigint NOT NULL,
  93    NUM_TRUES bigint NULL,
  94    PART_ID bigint NULL,
  95    PARTITION_NAME nvarchar(767) NOT NULL,
  96    "TABLE_NAME" nvarchar(256) NOT NULL
  97);
  98
  99ALTER TABLE PART_COL_STATS ADD CONSTRAINT PART_COL_STATS_PK PRIMARY KEY (CS_ID);
 100
 101CREATE INDEX PCS_STATS_IDX ON PART_COL_STATS (DB_NAME,TABLE_NAME,COLUMN_NAME,PARTITION_NAME);
 102
 103-- Table PART_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MPartitionPrivilege]
 104CREATE TABLE PART_PRIVS
 105(
 106    PART_GRANT_ID bigint NOT NULL,
 107    CREATE_TIME int NOT NULL,
 108    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 109    GRANTOR nvarchar(128) NULL,
 110    GRANTOR_TYPE nvarchar(128) NULL,
 111    PART_ID bigint NULL,
 112    PRINCIPAL_NAME nvarchar(128) NULL,
 113    PRINCIPAL_TYPE nvarchar(128) NULL,
 114    PART_PRIV nvarchar(128) NULL
 115);
 116
 117ALTER TABLE PART_PRIVS ADD CONSTRAINT PART_PRIVS_PK PRIMARY KEY (PART_GRANT_ID);
 118
 119-- Table SKEWED_STRING_LIST for classes [org.apache.hadoop.hive.metastore.model.MStringList]
 120CREATE TABLE SKEWED_STRING_LIST
 121(
 122    STRING_LIST_ID bigint NOT NULL
 123);
 124
 125ALTER TABLE SKEWED_STRING_LIST ADD CONSTRAINT SKEWED_STRING_LIST_PK PRIMARY KEY (STRING_LIST_ID);
 126
 127-- Table ROLES for classes [org.apache.hadoop.hive.metastore.model.MRole]
 128CREATE TABLE ROLES
 129(
 130    ROLE_ID bigint NOT NULL,
 131    CREATE_TIME int NOT NULL,
 132    OWNER_NAME nvarchar(128) NULL,
 133    ROLE_NAME nvarchar(128) NULL
 134);
 135
 136ALTER TABLE ROLES ADD CONSTRAINT ROLES_PK PRIMARY KEY (ROLE_ID);
 137
 138-- Table PARTITIONS for classes [org.apache.hadoop.hive.metastore.model.MPartition]
 139CREATE TABLE PARTITIONS
 140(
 141    PART_ID bigint NOT NULL,
 142    CREATE_TIME int NOT NULL,
 143    LAST_ACCESS_TIME int NOT NULL,
 144    PART_NAME nvarchar(767) NULL,
 145    SD_ID bigint NULL,
 146    TBL_ID bigint NULL
 147);
 148
 149ALTER TABLE PARTITIONS ADD CONSTRAINT PARTITIONS_PK PRIMARY KEY (PART_ID);
 150
 151-- Table CDS for classes [org.apache.hadoop.hive.metastore.model.MColumnDescriptor]
 152CREATE TABLE CDS
 153(
 154    CD_ID bigint NOT NULL
 155);
 156
 157ALTER TABLE CDS ADD CONSTRAINT CDS_PK PRIMARY KEY (CD_ID);
 158
 159-- Table VERSION for classes [org.apache.hadoop.hive.metastore.model.MVersionTable]
 160CREATE TABLE VERSION
 161(
 162    VER_ID bigint NOT NULL,
 163    SCHEMA_VERSION nvarchar(127) NOT NULL,
 164    VERSION_COMMENT nvarchar(255) NOT NULL
 165);
 166
 167ALTER TABLE VERSION ADD CONSTRAINT VERSION_PK PRIMARY KEY (VER_ID);
 168
 169-- Table GLOBAL_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MGlobalPrivilege]
 170CREATE TABLE GLOBAL_PRIVS
 171(
 172    USER_GRANT_ID bigint NOT NULL,
 173    CREATE_TIME int NOT NULL,
 174    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 175    GRANTOR nvarchar(128) NULL,
 176    GRANTOR_TYPE nvarchar(128) NULL,
 177    PRINCIPAL_NAME nvarchar(128) NULL,
 178    PRINCIPAL_TYPE nvarchar(128) NULL,
 179    USER_PRIV nvarchar(128) NULL
 180);
 181
 182ALTER TABLE GLOBAL_PRIVS ADD CONSTRAINT GLOBAL_PRIVS_PK PRIMARY KEY (USER_GRANT_ID);
 183
 184-- Table PART_COL_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MPartitionColumnPrivilege]
 185CREATE TABLE PART_COL_PRIVS
 186(
 187    PART_COLUMN_GRANT_ID bigint NOT NULL,
 188    "COLUMN_NAME" nvarchar(767) NULL,
 189    CREATE_TIME int NOT NULL,
 190    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 191    GRANTOR nvarchar(128) NULL,
 192    GRANTOR_TYPE nvarchar(128) NULL,
 193    PART_ID bigint NULL,
 194    PRINCIPAL_NAME nvarchar(128) NULL,
 195    PRINCIPAL_TYPE nvarchar(128) NULL,
 196    PART_COL_PRIV nvarchar(128) NULL
 197);
 198
 199ALTER TABLE PART_COL_PRIVS ADD CONSTRAINT PART_COL_PRIVS_PK PRIMARY KEY (PART_COLUMN_GRANT_ID);
 200
 201-- Table DB_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MDBPrivilege]
 202CREATE TABLE DB_PRIVS
 203(
 204    DB_GRANT_ID bigint NOT NULL,
 205    CREATE_TIME int NOT NULL,
 206    DB_ID bigint NULL,
 207    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 208    GRANTOR nvarchar(128) NULL,
 209    GRANTOR_TYPE nvarchar(128) NULL,
 210    PRINCIPAL_NAME nvarchar(128) NULL,
 211    PRINCIPAL_TYPE nvarchar(128) NULL,
 212    DB_PRIV nvarchar(128) NULL
 213);
 214
 215ALTER TABLE DB_PRIVS ADD CONSTRAINT DB_PRIVS_PK PRIMARY KEY (DB_GRANT_ID);
 216
 217-- Table TAB_COL_STATS for classes [org.apache.hadoop.hive.metastore.model.MTableColumnStatistics]
 218CREATE TABLE TAB_COL_STATS
 219(
 220    CS_ID bigint NOT NULL,
 221    AVG_COL_LEN float NULL,
 222    "COLUMN_NAME" nvarchar(767) NOT NULL,
 223    COLUMN_TYPE nvarchar(128) NOT NULL,
 224    DB_NAME nvarchar(128) NOT NULL,
 225    BIG_DECIMAL_HIGH_VALUE nvarchar(255) NULL,
 226    BIG_DECIMAL_LOW_VALUE nvarchar(255) NULL,
 227    DOUBLE_HIGH_VALUE float NULL,
 228    DOUBLE_LOW_VALUE float NULL,
 229    LAST_ANALYZED bigint NOT NULL,
 230    LONG_HIGH_VALUE bigint NULL,
 231    LONG_LOW_VALUE bigint NULL,
 232    MAX_COL_LEN bigint NULL,
 233    NUM_DISTINCTS bigint NULL,
 234    NUM_FALSES bigint NULL,
 235    NUM_NULLS bigint NOT NULL,
 236    NUM_TRUES bigint NULL,
 237    TBL_ID bigint NULL,
 238    "TABLE_NAME" nvarchar(256) NOT NULL
 239);
 240
 241ALTER TABLE TAB_COL_STATS ADD CONSTRAINT TAB_COL_STATS_PK PRIMARY KEY (CS_ID);
 242
 243-- Table TYPES for classes [org.apache.hadoop.hive.metastore.model.MType]
 244CREATE TABLE TYPES
 245(
 246    TYPES_ID bigint NOT NULL,
 247    TYPE_NAME nvarchar(128) NULL,
 248    TYPE1 nvarchar(767) NULL,
 249    TYPE2 nvarchar(767) NULL
 250);
 251
 252ALTER TABLE TYPES ADD CONSTRAINT TYPES_PK PRIMARY KEY (TYPES_ID);
 253
 254-- Table TBL_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MTablePrivilege]
 255CREATE TABLE TBL_PRIVS
 256(
 257    TBL_GRANT_ID bigint NOT NULL,
 258    CREATE_TIME int NOT NULL,
 259    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 260    GRANTOR nvarchar(128) NULL,
 261    GRANTOR_TYPE nvarchar(128) NULL,
 262    PRINCIPAL_NAME nvarchar(128) NULL,
 263    PRINCIPAL_TYPE nvarchar(128) NULL,
 264    TBL_PRIV nvarchar(128) NULL,
 265    TBL_ID bigint NULL
 266);
 267
 268ALTER TABLE TBL_PRIVS ADD CONSTRAINT TBL_PRIVS_PK PRIMARY KEY (TBL_GRANT_ID);
 269
 270-- Table DBS for classes [org.apache.hadoop.hive.metastore.model.MDatabase]
 271CREATE TABLE DBS
 272(
 273    DB_ID bigint NOT NULL,
 274    "DESC" nvarchar(4000) NULL,
 275    DB_LOCATION_URI nvarchar(4000) NOT NULL,
 276    "NAME" nvarchar(128) NULL,
 277    OWNER_NAME nvarchar(128) NULL,
 278    OWNER_TYPE nvarchar(10) NULL
 279);
 280
 281ALTER TABLE DBS ADD CONSTRAINT DBS_PK PRIMARY KEY (DB_ID);
 282
 283-- Table TBL_COL_PRIVS for classes [org.apache.hadoop.hive.metastore.model.MTableColumnPrivilege]
 284CREATE TABLE TBL_COL_PRIVS
 285(
 286    TBL_COLUMN_GRANT_ID bigint NOT NULL,
 287    "COLUMN_NAME" nvarchar(767) NULL,
 288    CREATE_TIME int NOT NULL,
 289    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 290    GRANTOR nvarchar(128) NULL,
 291    GRANTOR_TYPE nvarchar(128) NULL,
 292    PRINCIPAL_NAME nvarchar(128) NULL,
 293    PRINCIPAL_TYPE nvarchar(128) NULL,
 294    TBL_COL_PRIV nvarchar(128) NULL,
 295    TBL_ID bigint NULL
 296);
 297
 298ALTER TABLE TBL_COL_PRIVS ADD CONSTRAINT TBL_COL_PRIVS_PK PRIMARY KEY (TBL_COLUMN_GRANT_ID);
 299
 300-- Table DELEGATION_TOKENS for classes [org.apache.hadoop.hive.metastore.model.MDelegationToken]
 301CREATE TABLE DELEGATION_TOKENS
 302(
 303    TOKEN_IDENT nvarchar(767) NOT NULL,
 304    TOKEN nvarchar(767) NULL
 305);
 306
 307ALTER TABLE DELEGATION_TOKENS ADD CONSTRAINT DELEGATION_TOKENS_PK PRIMARY KEY (TOKEN_IDENT);
 308
 309-- Table SERDES for classes [org.apache.hadoop.hive.metastore.model.MSerDeInfo]
 310CREATE TABLE SERDES
 311(
 312    SERDE_ID bigint NOT NULL,
 313    "NAME" nvarchar(128) NULL,
 314    SLIB nvarchar(4000) NULL
 315);
 316
 317ALTER TABLE SERDES ADD CONSTRAINT SERDES_PK PRIMARY KEY (SERDE_ID);
 318
 319-- Table FUNCS for classes [org.apache.hadoop.hive.metastore.model.MFunction]
 320CREATE TABLE FUNCS
 321(
 322    FUNC_ID bigint NOT NULL,
 323    CLASS_NAME nvarchar(4000) NULL,
 324    CREATE_TIME int NOT NULL,
 325    DB_ID bigint NULL,
 326    FUNC_NAME nvarchar(128) NULL,
 327    FUNC_TYPE int NOT NULL,
 328    OWNER_NAME nvarchar(128) NULL,
 329    OWNER_TYPE nvarchar(10) NULL
 330);
 331
 332ALTER TABLE FUNCS ADD CONSTRAINT FUNCS_PK PRIMARY KEY (FUNC_ID);
 333
 334-- Table ROLE_MAP for classes [org.apache.hadoop.hive.metastore.model.MRoleMap]
 335CREATE TABLE ROLE_MAP
 336(
 337    ROLE_GRANT_ID bigint NOT NULL,
 338    ADD_TIME int NOT NULL,
 339    GRANT_OPTION smallint NOT NULL CHECK (GRANT_OPTION IN (0,1)),
 340    GRANTOR nvarchar(128) NULL,
 341    GRANTOR_TYPE nvarchar(128) NULL,
 342    PRINCIPAL_NAME nvarchar(128) NULL,
 343    PRINCIPAL_TYPE nvarchar(128) NULL,
 344    ROLE_ID bigint NULL
 345);
 346
 347ALTER TABLE ROLE_MAP ADD CONSTRAINT ROLE_MAP_PK PRIMARY KEY (ROLE_GRANT_ID);
 348
 349-- Table TBLS for classes [org.apache.hadoop.hive.metastore.model.MTable]
 350CREATE TABLE TBLS
 351(
 352    TBL_ID bigint NOT NULL,
 353    CREATE_TIME int NOT NULL,
 354    DB_ID bigint NULL,
 355    LAST_ACCESS_TIME int NOT NULL,
 356    OWNER nvarchar(767) NULL,
 357    RETENTION int NOT NULL,
 358    SD_ID bigint NULL,
 359    TBL_NAME nvarchar(256) NULL,
 360    TBL_TYPE nvarchar(128) NULL,
 361    VIEW_EXPANDED_TEXT text NULL,
 362    VIEW_ORIGINAL_TEXT text NULL,
 363    IS_REWRITE_ENABLED bit NOT NULL DEFAULT 0
 364);
 365
 366ALTER TABLE TBLS ADD CONSTRAINT TBLS_PK PRIMARY KEY (TBL_ID);
 367
 368-- Table SDS for classes [org.apache.hadoop.hive.metastore.model.MStorageDescriptor]
 369CREATE TABLE SDS
 370(
 371    SD_ID bigint NOT NULL,
 372    CD_ID bigint NULL,
 373    INPUT_FORMAT nvarchar(4000) NULL,
 374    IS_COMPRESSED bit NOT NULL,
 375    IS_STOREDASSUBDIRECTORIES bit NOT NULL,
 376    LOCATION nvarchar(4000) NULL,
 377    NUM_BUCKETS int NOT NULL,
 378    OUTPUT_FORMAT nvarchar(4000) NULL,
 379    SERDE_ID bigint NULL
 380);
 381
 382ALTER TABLE SDS ADD CONSTRAINT SDS_PK PRIMARY KEY (SD_ID);
 383
 384-- Table PARTITION_EVENTS for classes [org.apache.hadoop.hive.metastore.model.MPartitionEvent]
 385CREATE TABLE PARTITION_EVENTS
 386(
 387    PART_NAME_ID bigint NOT NULL,
 388    DB_NAME nvarchar(128) NULL,
 389    EVENT_TIME bigint NOT NULL,
 390    EVENT_TYPE int NOT NULL,
 391    PARTITION_NAME nvarchar(767) NULL,
 392    TBL_NAME nvarchar(256) NULL
 393);
 394
 395ALTER TABLE PARTITION_EVENTS ADD CONSTRAINT PARTITION_EVENTS_PK PRIMARY KEY (PART_NAME_ID);
 396
 397-- Table SORT_COLS for join relationship
 398CREATE TABLE SORT_COLS
 399(
 400    SD_ID bigint NOT NULL,
 401    "COLUMN_NAME" nvarchar(767) NULL,
 402    "ORDER" int NOT NULL,
 403    INTEGER_IDX int NOT NULL
 404);
 405
 406ALTER TABLE SORT_COLS ADD CONSTRAINT SORT_COLS_PK PRIMARY KEY (SD_ID,INTEGER_IDX);
 407
 408-- Table SKEWED_COL_NAMES for join relationship
 409CREATE TABLE SKEWED_COL_NAMES
 410(
 411    SD_ID bigint NOT NULL,
 412    SKEWED_COL_NAME nvarchar(255) NULL,
 413    INTEGER_IDX int NOT NULL
 414);
 415
 416ALTER TABLE SKEWED_COL_NAMES ADD CONSTRAINT SKEWED_COL_NAMES_PK PRIMARY KEY (SD_ID,INTEGER_IDX);
 417
 418-- Table SKEWED_COL_VALUE_LOC_MAP for join relationship
 419CREATE TABLE SKEWED_COL_VALUE_LOC_MAP
 420(
 421    SD_ID bigint NOT NULL,
 422    STRING_LIST_ID_KID bigint NOT NULL,
 423    LOCATION nvarchar(4000) NULL
 424);
 425
 426ALTER TABLE SKEWED_COL_VALUE_LOC_MAP ADD CONSTRAINT SKEWED_COL_VALUE_LOC_MAP_PK PRIMARY KEY (SD_ID,STRING_LIST_ID_KID);
 427
 428-- Table SKEWED_STRING_LIST_VALUES for join relationship
 429CREATE TABLE SKEWED_STRING_LIST_VALUES
 430(
 431    STRING_LIST_ID bigint NOT NULL,
 432    STRING_LIST_VALUE nvarchar(255) NULL,
 433    INTEGER_IDX int NOT NULL
 434);
 435
 436ALTER TABLE SKEWED_STRING_LIST_VALUES ADD CONSTRAINT SKEWED_STRING_LIST_VALUES_PK PRIMARY KEY (STRING_LIST_ID,INTEGER_IDX);
 437
 438-- Table PARTITION_KEY_VALS for join relationship
 439CREATE TABLE PARTITION_KEY_VALS
 440(
 441    PART_ID bigint NOT NULL,
 442    PART_KEY_VAL nvarchar(255) NULL,
 443    INTEGER_IDX int NOT NULL
 444);
 445
 446ALTER TABLE PARTITION_KEY_VALS ADD CONSTRAINT PARTITION_KEY_VALS_PK PRIMARY KEY (PART_ID,INTEGER_IDX);
 447
 448-- Table PARTITION_KEYS for join relationship
 449CREATE TABLE PARTITION_KEYS
 450(
 451    TBL_ID bigint NOT NULL,
 452    PKEY_COMMENT nvarchar(4000) NULL,
 453    PKEY_NAME nvarchar(128) NOT NULL,
 454    PKEY_TYPE nvarchar(767) NOT NULL,
 455    INTEGER_IDX int NOT NULL
 456);
 457
 458ALTER TABLE PARTITION_KEYS ADD CONSTRAINT PARTITION_KEY_PK PRIMARY KEY (TBL_ID,PKEY_NAME);
 459
 460-- Table SKEWED_VALUES for join relationship
 461CREATE TABLE SKEWED_VALUES
 462(
 463    SD_ID_OID bigint NOT NULL,
 464    STRING_LIST_ID_EID bigint NULL,
 465    INTEGER_IDX int NOT NULL
 466);
 467
 468ALTER TABLE SKEWED_VALUES ADD CONSTRAINT SKEWED_VALUES_PK PRIMARY KEY (SD_ID_OID,INTEGER_IDX);
 469
 470-- Table SD_PARAMS for join relationship
 471CREATE TABLE SD_PARAMS
 472(
 473    SD_ID bigint NOT NULL,
 474    PARAM_KEY nvarchar(256) NOT NULL,
 475    PARAM_VALUE varchar(max) NULL
 476);
 477
 478ALTER TABLE SD_PARAMS ADD CONSTRAINT SD_PARAMS_PK PRIMARY KEY (SD_ID,PARAM_KEY);
 479
 480-- Table FUNC_RU for join relationship
 481CREATE TABLE FUNC_RU
 482(
 483    FUNC_ID bigint NOT NULL,
 484    RESOURCE_TYPE int NOT NULL,
 485    RESOURCE_URI nvarchar(4000) NULL,
 486    INTEGER_IDX int NOT NULL
 487);
 488
 489ALTER TABLE FUNC_RU ADD CONSTRAINT FUNC_RU_PK PRIMARY KEY (FUNC_ID,INTEGER_IDX);
 490
 491-- Table TYPE_FIELDS for join relationship
 492CREATE TABLE TYPE_FIELDS
 493(
 494    TYPE_NAME bigint NOT NULL,
 495    COMMENT nvarchar(256) NULL,
 496    FIELD_NAME nvarchar(128) NOT NULL,
 497    FIELD_TYPE nvarchar(767) NOT NULL,
 498    INTEGER_IDX int NOT NULL
 499);
 500
 501ALTER TABLE TYPE_FIELDS ADD CONSTRAINT TYPE_FIELDS_PK PRIMARY KEY (TYPE_NAME,FIELD_NAME);
 502
 503-- Table BUCKETING_COLS for join relationship
 504CREATE TABLE BUCKETING_COLS
 505(
 506    SD_ID bigint NOT NULL,
 507    BUCKET_COL_NAME nvarchar(255) NULL,
 508    INTEGER_IDX int NOT NULL
 509);
 510
 511ALTER TABLE BUCKETING_COLS ADD CONSTRAINT BUCKETING_COLS_PK PRIMARY KEY (SD_ID,INTEGER_IDX);
 512
 513-- Table DATABASE_PARAMS for join relationship
 514CREATE TABLE DATABASE_PARAMS
 515(
 516    DB_ID bigint NOT NULL,
 517    PARAM_KEY nvarchar(180) NOT NULL,
 518    PARAM_VALUE nvarchar(4000) NULL
 519);
 520
 521ALTER TABLE DATABASE_PARAMS ADD CONSTRAINT DATABASE_PARAMS_PK PRIMARY KEY (DB_ID,PARAM_KEY);
 522
 523-- Table INDEX_PARAMS for join relationship
 524CREATE TABLE INDEX_PARAMS
 525(
 526    INDEX_ID bigint NOT NULL,
 527    PARAM_KEY nvarchar(256) NOT NULL,
 528    PARAM_VALUE nvarchar(4000) NULL
 529);
 530
 531ALTER TABLE INDEX_PARAMS ADD CONSTRAINT INDEX_PARAMS_PK PRIMARY KEY (INDEX_ID,PARAM_KEY);
 532
 533-- Table COLUMNS_V2 for join relationship
 534CREATE TABLE COLUMNS_V2
 535(
 536    CD_ID bigint NOT NULL,
 537    COMMENT nvarchar(256) NULL,
 538    "COLUMN_NAME" nvarchar(767) NOT NULL,
 539    TYPE_NAME varchar(max) NOT NULL,
 540    INTEGER_IDX int NOT NULL
 541);
 542
 543ALTER TABLE COLUMNS_V2 ADD CONSTRAINT COLUMNS_PK PRIMARY KEY (CD_ID,"COLUMN_NAME");
 544
 545-- Table SERDE_PARAMS for join relationship
 546CREATE TABLE SERDE_PARAMS
 547(
 548    SERDE_ID bigint NOT NULL,
 549    PARAM_KEY nvarchar(256) NOT NULL,
 550    PARAM_VALUE varchar(max) NULL
 551);
 552
 553ALTER TABLE SERDE_PARAMS ADD CONSTRAINT SERDE_PARAMS_PK PRIMARY KEY (SERDE_ID,PARAM_KEY);
 554
 555-- Table PARTITION_PARAMS for join relationship
 556CREATE TABLE PARTITION_PARAMS
 557(
 558    PART_ID bigint NOT NULL,
 559    PARAM_KEY nvarchar(256) NOT NULL,
 560    PARAM_VALUE nvarchar(4000) NULL
 561);
 562
 563ALTER TABLE PARTITION_PARAMS ADD CONSTRAINT PARTITION_PARAMS_PK PRIMARY KEY (PART_ID,PARAM_KEY);
 564
 565-- Table TABLE_PARAMS for join relationship
 566CREATE TABLE TABLE_PARAMS
 567(
 568    TBL_ID bigint NOT NULL,
 569    PARAM_KEY nvarchar(256) NOT NULL,
 570    PARAM_VALUE varchar(max) NULL
 571);
 572
 573ALTER TABLE TABLE_PARAMS ADD CONSTRAINT TABLE_PARAMS_PK PRIMARY KEY (TBL_ID,PARAM_KEY);
 574
 575CREATE TABLE NOTIFICATION_LOG
 576(
 577    NL_ID bigint NOT NULL,
 578    EVENT_ID bigint NOT NULL,
 579    EVENT_TIME int NOT NULL,
 580    EVENT_TYPE nvarchar(32) NOT NULL,
 581    DB_NAME nvarchar(128) NULL,
 582    TBL_NAME nvarchar(256) NULL,
 583    MESSAGE_FORMAT nvarchar(16),
 584    MESSAGE text NULL
 585);
 586
 587ALTER TABLE NOTIFICATION_LOG ADD CONSTRAINT NOTIFICATION_LOG_PK PRIMARY KEY (NL_ID);
 588
 589CREATE TABLE NOTIFICATION_SEQUENCE
 590(
 591    NNI_ID bigint NOT NULL,
 592    NEXT_EVENT_ID bigint NOT NULL
 593);
 594
 595ALTER TABLE NOTIFICATION_SEQUENCE ADD CONSTRAINT NOTIFICATION_SEQUENCE_PK PRIMARY KEY (NNI_ID);
 596
 597-- Constraints for table MASTER_KEYS for class(es) [org.apache.hadoop.hive.metastore.model.MMasterKey]
 598
 599-- Constraints for table IDXS for class(es) [org.apache.hadoop.hive.metastore.model.MIndex]
 600ALTER TABLE IDXS ADD CONSTRAINT IDXS_FK1 FOREIGN KEY (INDEX_TBL_ID) REFERENCES TBLS (TBL_ID) ;
 601
 602ALTER TABLE IDXS ADD CONSTRAINT IDXS_FK2 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 603
 604ALTER TABLE IDXS ADD CONSTRAINT IDXS_FK3 FOREIGN KEY (ORIG_TBL_ID) REFERENCES TBLS (TBL_ID) ;
 605
 606CREATE UNIQUE INDEX UNIQUEINDEX ON IDXS (INDEX_NAME,ORIG_TBL_ID);
 607
 608CREATE INDEX IDXS_N51 ON IDXS (SD_ID);
 609
 610CREATE INDEX IDXS_N50 ON IDXS (ORIG_TBL_ID);
 611
 612CREATE INDEX IDXS_N49 ON IDXS (INDEX_TBL_ID);
 613
 614
 615-- Constraints for table PART_COL_STATS for class(es) [org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics]
 616ALTER TABLE PART_COL_STATS ADD CONSTRAINT PART_COL_STATS_FK1 FOREIGN KEY (PART_ID) REFERENCES PARTITIONS (PART_ID) ;
 617
 618CREATE INDEX PART_COL_STATS_N49 ON PART_COL_STATS (PART_ID);
 619
 620
 621-- Constraints for table PART_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MPartitionPrivilege]
 622ALTER TABLE PART_PRIVS ADD CONSTRAINT PART_PRIVS_FK1 FOREIGN KEY (PART_ID) REFERENCES PARTITIONS (PART_ID) ;
 623
 624CREATE INDEX PARTPRIVILEGEINDEX ON PART_PRIVS (PART_ID,PRINCIPAL_NAME,PRINCIPAL_TYPE,PART_PRIV,GRANTOR,GRANTOR_TYPE);
 625
 626CREATE INDEX PART_PRIVS_N49 ON PART_PRIVS (PART_ID);
 627
 628
 629-- Constraints for table SKEWED_STRING_LIST for class(es) [org.apache.hadoop.hive.metastore.model.MStringList]
 630
 631-- Constraints for table ROLES for class(es) [org.apache.hadoop.hive.metastore.model.MRole]
 632CREATE UNIQUE INDEX ROLEENTITYINDEX ON ROLES (ROLE_NAME);
 633
 634
 635-- Constraints for table PARTITIONS for class(es) [org.apache.hadoop.hive.metastore.model.MPartition]
 636ALTER TABLE PARTITIONS ADD CONSTRAINT PARTITIONS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 637
 638ALTER TABLE PARTITIONS ADD CONSTRAINT PARTITIONS_FK2 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 639
 640CREATE INDEX PARTITIONS_N49 ON PARTITIONS (SD_ID);
 641
 642CREATE INDEX PARTITIONS_N50 ON PARTITIONS (TBL_ID);
 643
 644CREATE UNIQUE INDEX UNIQUEPARTITION ON PARTITIONS (PART_NAME,TBL_ID);
 645
 646
 647-- Constraints for table CDS for class(es) [org.apache.hadoop.hive.metastore.model.MColumnDescriptor]
 648
 649-- Constraints for table VERSION for class(es) [org.apache.hadoop.hive.metastore.model.MVersionTable]
 650
 651-- Constraints for table GLOBAL_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MGlobalPrivilege]
 652CREATE UNIQUE INDEX GLOBALPRIVILEGEINDEX ON GLOBAL_PRIVS (PRINCIPAL_NAME,PRINCIPAL_TYPE,USER_PRIV,GRANTOR,GRANTOR_TYPE);
 653
 654
 655-- Constraints for table PART_COL_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MPartitionColumnPrivilege]
 656ALTER TABLE PART_COL_PRIVS ADD CONSTRAINT PART_COL_PRIVS_FK1 FOREIGN KEY (PART_ID) REFERENCES PARTITIONS (PART_ID) ;
 657
 658CREATE INDEX PART_COL_PRIVS_N49 ON PART_COL_PRIVS (PART_ID);
 659
 660CREATE INDEX PARTITIONCOLUMNPRIVILEGEINDEX ON PART_COL_PRIVS (PART_ID,"COLUMN_NAME",PRINCIPAL_NAME,PRINCIPAL_TYPE,PART_COL_PRIV,GRANTOR,GRANTOR_TYPE);
 661
 662
 663-- Constraints for table DB_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MDBPrivilege]
 664ALTER TABLE DB_PRIVS ADD CONSTRAINT DB_PRIVS_FK1 FOREIGN KEY (DB_ID) REFERENCES DBS (DB_ID) ;
 665
 666CREATE UNIQUE INDEX DBPRIVILEGEINDEX ON DB_PRIVS (DB_ID,PRINCIPAL_NAME,PRINCIPAL_TYPE,DB_PRIV,GRANTOR,GRANTOR_TYPE);
 667
 668CREATE INDEX DB_PRIVS_N49 ON DB_PRIVS (DB_ID);
 669
 670
 671-- Constraints for table TAB_COL_STATS for class(es) [org.apache.hadoop.hive.metastore.model.MTableColumnStatistics]
 672ALTER TABLE TAB_COL_STATS ADD CONSTRAINT TAB_COL_STATS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 673
 674CREATE INDEX TAB_COL_STATS_N49 ON TAB_COL_STATS (TBL_ID);
 675
 676
 677-- Constraints for table TYPES for class(es) [org.apache.hadoop.hive.metastore.model.MType]
 678CREATE UNIQUE INDEX UNIQUETYPE ON TYPES (TYPE_NAME);
 679
 680
 681-- Constraints for table TBL_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MTablePrivilege]
 682ALTER TABLE TBL_PRIVS ADD CONSTRAINT TBL_PRIVS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 683
 684CREATE INDEX TBL_PRIVS_N49 ON TBL_PRIVS (TBL_ID);
 685
 686CREATE INDEX TABLEPRIVILEGEINDEX ON TBL_PRIVS (TBL_ID,PRINCIPAL_NAME,PRINCIPAL_TYPE,TBL_PRIV,GRANTOR,GRANTOR_TYPE);
 687
 688
 689-- Constraints for table DBS for class(es) [org.apache.hadoop.hive.metastore.model.MDatabase]
 690CREATE UNIQUE INDEX UNIQUEDATABASE ON DBS ("NAME");
 691
 692
 693-- Constraints for table TBL_COL_PRIVS for class(es) [org.apache.hadoop.hive.metastore.model.MTableColumnPrivilege]
 694ALTER TABLE TBL_COL_PRIVS ADD CONSTRAINT TBL_COL_PRIVS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 695
 696CREATE INDEX TABLECOLUMNPRIVILEGEINDEX ON TBL_COL_PRIVS (TBL_ID,"COLUMN_NAME",PRINCIPAL_NAME,PRINCIPAL_TYPE,TBL_COL_PRIV,GRANTOR,GRANTOR_TYPE);
 697
 698CREATE INDEX TBL_COL_PRIVS_N49 ON TBL_COL_PRIVS (TBL_ID);
 699
 700
 701-- Constraints for table DELEGATION_TOKENS for class(es) [org.apache.hadoop.hive.metastore.model.MDelegationToken]
 702
 703-- Constraints for table SERDES for class(es) [org.apache.hadoop.hive.metastore.model.MSerDeInfo]
 704
 705-- Constraints for table FUNCS for class(es) [org.apache.hadoop.hive.metastore.model.MFunction]
 706ALTER TABLE FUNCS ADD CONSTRAINT FUNCS_FK1 FOREIGN KEY (DB_ID) REFERENCES DBS (DB_ID) ;
 707
 708CREATE UNIQUE INDEX UNIQUEFUNCTION ON FUNCS (FUNC_NAME,DB_ID);
 709
 710CREATE INDEX FUNCS_N49 ON FUNCS (DB_ID);
 711
 712
 713-- Constraints for table ROLE_MAP for class(es) [org.apache.hadoop.hive.metastore.model.MRoleMap]
 714ALTER TABLE ROLE_MAP ADD CONSTRAINT ROLE_MAP_FK1 FOREIGN KEY (ROLE_ID) REFERENCES ROLES (ROLE_ID) ;
 715
 716CREATE INDEX ROLE_MAP_N49 ON ROLE_MAP (ROLE_ID);
 717
 718CREATE UNIQUE INDEX USERROLEMAPINDEX ON ROLE_MAP (PRINCIPAL_NAME,ROLE_ID,GRANTOR,GRANTOR_TYPE);
 719
 720
 721-- Constraints for table TBLS for class(es) [org.apache.hadoop.hive.metastore.model.MTable]
 722ALTER TABLE TBLS ADD CONSTRAINT TBLS_FK2 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 723
 724ALTER TABLE TBLS ADD CONSTRAINT TBLS_FK1 FOREIGN KEY (DB_ID) REFERENCES DBS (DB_ID) ;
 725
 726CREATE INDEX TBLS_N50 ON TBLS (SD_ID);
 727
 728CREATE UNIQUE INDEX UNIQUETABLE ON TBLS (TBL_NAME,DB_ID);
 729
 730CREATE INDEX TBLS_N49 ON TBLS (DB_ID);
 731
 732
 733-- Constraints for table SDS for class(es) [org.apache.hadoop.hive.metastore.model.MStorageDescriptor]
 734ALTER TABLE SDS ADD CONSTRAINT SDS_FK1 FOREIGN KEY (SERDE_ID) REFERENCES SERDES (SERDE_ID) ;
 735
 736ALTER TABLE SDS ADD CONSTRAINT SDS_FK2 FOREIGN KEY (CD_ID) REFERENCES CDS (CD_ID) ;
 737
 738CREATE INDEX SDS_N50 ON SDS (CD_ID);
 739
 740CREATE INDEX SDS_N49 ON SDS (SERDE_ID);
 741
 742
 743-- Constraints for table PARTITION_EVENTS for class(es) [org.apache.hadoop.hive.metastore.model.MPartitionEvent]
 744CREATE INDEX PARTITIONEVENTINDEX ON PARTITION_EVENTS (PARTITION_NAME);
 745
 746
 747-- Constraints for table SORT_COLS
 748ALTER TABLE SORT_COLS ADD CONSTRAINT SORT_COLS_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 749
 750CREATE INDEX SORT_COLS_N49 ON SORT_COLS (SD_ID);
 751
 752
 753-- Constraints for table SKEWED_COL_NAMES
 754ALTER TABLE SKEWED_COL_NAMES ADD CONSTRAINT SKEWED_COL_NAMES_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 755
 756CREATE INDEX SKEWED_COL_NAMES_N49 ON SKEWED_COL_NAMES (SD_ID);
 757
 758
 759-- Constraints for table SKEWED_COL_VALUE_LOC_MAP
 760ALTER TABLE SKEWED_COL_VALUE_LOC_MAP ADD CONSTRAINT SKEWED_COL_VALUE_LOC_MAP_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 761
 762ALTER TABLE SKEWED_COL_VALUE_LOC_MAP ADD CONSTRAINT SKEWED_COL_VALUE_LOC_MAP_FK2 FOREIGN KEY (STRING_LIST_ID_KID) REFERENCES SKEWED_STRING_LIST (STRING_LIST_ID) ;
 763
 764CREATE INDEX SKEWED_COL_VALUE_LOC_MAP_N50 ON SKEWED_COL_VALUE_LOC_MAP (STRING_LIST_ID_KID);
 765
 766CREATE INDEX SKEWED_COL_VALUE_LOC_MAP_N49 ON SKEWED_COL_VALUE_LOC_MAP (SD_ID);
 767
 768
 769-- Constraints for table SKEWED_STRING_LIST_VALUES
 770ALTER TABLE SKEWED_STRING_LIST_VALUES ADD CONSTRAINT SKEWED_STRING_LIST_VALUES_FK1 FOREIGN KEY (STRING_LIST_ID) REFERENCES SKEWED_STRING_LIST (STRING_LIST_ID) ;
 771
 772CREATE INDEX SKEWED_STRING_LIST_VALUES_N49 ON SKEWED_STRING_LIST_VALUES (STRING_LIST_ID);
 773
 774
 775-- Constraints for table PARTITION_KEY_VALS
 776ALTER TABLE PARTITION_KEY_VALS ADD CONSTRAINT PARTITION_KEY_VALS_FK1 FOREIGN KEY (PART_ID) REFERENCES PARTITIONS (PART_ID) ;
 777
 778CREATE INDEX PARTITION_KEY_VALS_N49 ON PARTITION_KEY_VALS (PART_ID);
 779
 780
 781-- Constraints for table PARTITION_KEYS
 782ALTER TABLE PARTITION_KEYS ADD CONSTRAINT PARTITION_KEYS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 783
 784CREATE INDEX PARTITION_KEYS_N49 ON PARTITION_KEYS (TBL_ID);
 785
 786
 787-- Constraints for table SKEWED_VALUES
 788ALTER TABLE SKEWED_VALUES ADD CONSTRAINT SKEWED_VALUES_FK1 FOREIGN KEY (SD_ID_OID) REFERENCES SDS (SD_ID) ;
 789
 790ALTER TABLE SKEWED_VALUES ADD CONSTRAINT SKEWED_VALUES_FK2 FOREIGN KEY (STRING_LIST_ID_EID) REFERENCES SKEWED_STRING_LIST (STRING_LIST_ID) ;
 791
 792CREATE INDEX SKEWED_VALUES_N50 ON SKEWED_VALUES (SD_ID_OID);
 793
 794CREATE INDEX SKEWED_VALUES_N49 ON SKEWED_VALUES (STRING_LIST_ID_EID);
 795
 796
 797-- Constraints for table SD_PARAMS
 798ALTER TABLE SD_PARAMS ADD CONSTRAINT SD_PARAMS_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 799
 800CREATE INDEX SD_PARAMS_N49 ON SD_PARAMS (SD_ID);
 801
 802
 803-- Constraints for table FUNC_RU
 804ALTER TABLE FUNC_RU ADD CONSTRAINT FUNC_RU_FK1 FOREIGN KEY (FUNC_ID) REFERENCES FUNCS (FUNC_ID) ;
 805
 806CREATE INDEX FUNC_RU_N49 ON FUNC_RU (FUNC_ID);
 807
 808
 809-- Constraints for table TYPE_FIELDS
 810ALTER TABLE TYPE_FIELDS ADD CONSTRAINT TYPE_FIELDS_FK1 FOREIGN KEY (TYPE_NAME) REFERENCES TYPES (TYPES_ID) ;
 811
 812CREATE INDEX TYPE_FIELDS_N49 ON TYPE_FIELDS (TYPE_NAME);
 813
 814
 815-- Constraints for table BUCKETING_COLS
 816ALTER TABLE BUCKETING_COLS ADD CONSTRAINT BUCKETING_COLS_FK1 FOREIGN KEY (SD_ID) REFERENCES SDS (SD_ID) ;
 817
 818CREATE INDEX BUCKETING_COLS_N49 ON BUCKETING_COLS (SD_ID);
 819
 820
 821-- Constraints for table DATABASE_PARAMS
 822ALTER TABLE DATABASE_PARAMS ADD CONSTRAINT DATABASE_PARAMS_FK1 FOREIGN KEY (DB_ID) REFERENCES DBS (DB_ID) ;
 823
 824CREATE INDEX DATABASE_PARAMS_N49 ON DATABASE_PARAMS (DB_ID);
 825
 826
 827-- Constraints for table INDEX_PARAMS
 828ALTER TABLE INDEX_PARAMS ADD CONSTRAINT INDEX_PARAMS_FK1 FOREIGN KEY (INDEX_ID) REFERENCES IDXS (INDEX_ID) ;
 829
 830CREATE INDEX INDEX_PARAMS_N49 ON INDEX_PARAMS (INDEX_ID);
 831
 832
 833-- Constraints for table COLUMNS_V2
 834ALTER TABLE COLUMNS_V2 ADD CONSTRAINT COLUMNS_V2_FK1 FOREIGN KEY (CD_ID) REFERENCES CDS (CD_ID) ;
 835
 836CREATE INDEX COLUMNS_V2_N49 ON COLUMNS_V2 (CD_ID);
 837
 838
 839-- Constraints for table SERDE_PARAMS
 840ALTER TABLE SERDE_PARAMS ADD CONSTRAINT SERDE_PARAMS_FK1 FOREIGN KEY (SERDE_ID) REFERENCES SERDES (SERDE_ID) ;
 841
 842CREATE INDEX SERDE_PARAMS_N49 ON SERDE_PARAMS (SERDE_ID);
 843
 844
 845-- Constraints for table PARTITION_PARAMS
 846ALTER TABLE PARTITION_PARAMS ADD CONSTRAINT PARTITION_PARAMS_FK1 FOREIGN KEY (PART_ID) REFERENCES PARTITIONS (PART_ID) ;
 847
 848CREATE INDEX PARTITION_PARAMS_N49 ON PARTITION_PARAMS (PART_ID);
 849
 850
 851-- Constraints for table TABLE_PARAMS
 852ALTER TABLE TABLE_PARAMS ADD CONSTRAINT TABLE_PARAMS_FK1 FOREIGN KEY (TBL_ID) REFERENCES TBLS (TBL_ID) ;
 853
 854CREATE INDEX TABLE_PARAMS_N49 ON TABLE_PARAMS (TBL_ID);
 855
 856
 857
 858-- -----------------------------------------------------------------------------------------------------------------------------------------------
 859-- Transaction and Lock Tables
 860-- These are not part of package jdo, so if you are going to regenerate this file you need to manually add the following section back to the file.
 861-- -----------------------------------------------------------------------------------------------------------------------------------------------
 862CREATE TABLE COMPACTION_QUEUE(
 863	CQ_ID bigint NOT NULL,
 864	CQ_DATABASE nvarchar(128) NOT NULL,
 865	CQ_TABLE nvarchar(128) NOT NULL,
 866	CQ_PARTITION nvarchar(767) NULL,
 867	CQ_STATE char(1) NOT NULL,
 868	CQ_TYPE char(1) NOT NULL,
 869	CQ_TBLPROPERTIES nvarchar(2048) NULL,
 870	CQ_WORKER_ID nvarchar(128) NULL,
 871	CQ_START bigint NULL,
 872	CQ_RUN_AS nvarchar(128) NULL,
 873	CQ_HIGHEST_TXN_ID bigint NULL,
 874    CQ_META_INFO varbinary(2048) NULL,
 875	CQ_HADOOP_JOB_ID nvarchar(128) NULL,
 876PRIMARY KEY CLUSTERED 
 877(
 878	CQ_ID ASC
 879)
 880);
 881
 882CREATE TABLE COMPLETED_COMPACTIONS (
 883	CC_ID bigint NOT NULL,
 884	CC_DATABASE nvarchar(128) NOT NULL,
 885	CC_TABLE nvarchar(128) NOT NULL,
 886	CC_PARTITION nvarchar(767) NULL,
 887	CC_STATE char(1) NOT NULL,
 888	CC_TYPE char(1) NOT NULL,
 889	CC_TBLPROPERTIES nvarchar(2048) NULL,
 890	CC_WORKER_ID nvarchar(128) NULL,
 891	CC_START bigint NULL,
 892	CC_END bigint NULL,
 893	CC_RUN_AS nvarchar(128) NULL,
 894	CC_HIGHEST_TXN_ID bigint NULL,
 895    CC_META_INFO varbinary(2048) NULL,
 896	CC_HADOOP_JOB_ID nvarchar(128) NULL,
 897PRIMARY KEY CLUSTERED 
 898(
 899	CC_ID ASC
 900)
 901);
 902
 903CREATE TABLE COMPLETED_TXN_COMPONENTS(
 904	CTC_TXNID bigint NULL,
 905	CTC_DATABASE nvarchar(128) NOT NULL,
 906	CTC_TABLE nvarchar(128) NULL,
 907	CTC_PARTITION nvarchar(767) NULL
 908);
 909
 910CREATE TABLE HIVE_LOCKS(
 911	HL_LOCK_EXT_ID bigint NOT NULL,
 912	HL_LOCK_INT_ID bigint NOT NULL,
 913	HL_TXNID bigint NULL,
 914	HL_DB nvarchar(128) NOT NULL,
 915	HL_TABLE nvarchar(128) NULL,
 916	HL_PARTITION nvarchar(767) NULL,
 917	HL_LOCK_STATE char(1) NOT NULL,
 918	HL_LOCK_TYPE char(1) NOT NULL,
 919	HL_LAST_HEARTBEAT bigint NOT NULL,
 920	HL_ACQUIRED_AT bigint NULL,
 921	HL_USER nvarchar(128) NOT NULL,
 922	HL_HOST nvarchar(128) NOT NULL,
 923    HL_HEARTBEAT_COUNT int NULL,
 924    HL_AGENT_INFO nvarchar(128) NULL,
 925    HL_BLOCKEDBY_EXT_ID bigint NULL,
 926    HL_BLOCKEDBY_INT_ID bigint NULL,
 927PRIMARY KEY CLUSTERED 
 928(
 929	HL_LOCK_EXT_ID ASC,
 930	HL_LOCK_INT_ID ASC
 931)
 932);
 933
 934CREATE TABLE NEXT_COMPACTION_QUEUE_ID(
 935	NCQ_NEXT bigint NOT NULL
 936);
 937
 938INSERT INTO NEXT_COMPACTION_QUEUE_ID VALUES(1);
 939
 940CREATE TABLE NEXT_LOCK_ID(
 941	NL_NEXT bigint NOT NULL
 942);
 943
 944INSERT INTO NEXT_LOCK_ID VALUES(1);
 945
 946CREATE TABLE NEXT_TXN_ID(
 947	NTXN_NEXT bigint NOT NULL
 948);
 949
 950INSERT INTO NEXT_TXN_ID VALUES(1);
 951
 952CREATE TABLE TXNS(
 953	TXN_ID bigint NOT NULL,
 954	TXN_STATE char(1) NOT NULL,
 955	TXN_STARTED bigint NOT NULL,
 956	TXN_LAST_HEARTBEAT bigint NOT NULL,
 957	TXN_USER nvarchar(128) NOT NULL,
 958	TXN_HOST nvarchar(128) NOT NULL,
 959    TXN_AGENT_INFO nvarchar(128) NULL,
 960    TXN_META_INFO nvarchar(128) NULL,
 961    TXN_HEARTBEAT_COUNT int NULL,
 962PRIMARY KEY CLUSTERED 
 963(
 964	TXN_ID ASC
 965)
 966);
 967
 968CREATE TABLE TXN_COMPONENTS(
 969	TC_TXNID bigint NULL,
 970	TC_DATABASE nvarchar(128) NOT NULL,
 971	TC_TABLE nvarchar(128) NULL,
 972	TC_PARTITION nvarchar(767) NULL,
 973	TC_OPERATION_TYPE char(1) NOT NULL
 974);
 975
 976ALTER TABLE TXN_COMPONENTS  WITH CHECK ADD FOREIGN KEY(TC_TXNID) REFERENCES TXNS (TXN_ID);
 977
 978CREATE INDEX TC_TXNID_INDEX ON TXN_COMPONENTS (TC_TXNID);
 979
 980CREATE TABLE AUX_TABLE (
 981  MT_KEY1 nvarchar(128) NOT NULL,
 982  MT_KEY2 bigint NOT NULL,
 983  MT_COMMENT nvarchar(255) NULL,
 984  PRIMARY KEY CLUSTERED
 985(
 986    MT_KEY1 ASC,
 987    MT_KEY2 ASC
 988)
 989);
 990
 991CREATE TABLE KEY_CONSTRAINTS
 992(
 993  CHILD_CD_ID BIGINT,
 994  CHILD_INTEGER_IDX INT,
 995  CHILD_TBL_ID BIGINT,
 996  PARENT_CD_ID BIGINT NOT NULL,
 997  PARENT_INTEGER_IDX INT NOT NULL,
 998  PARENT_TBL_ID BIGINT NOT NULL,
 999  POSITION INT NOT NULL,
1000  CONSTRAINT_NAME VARCHAR(400) NOT NULL,
1001  CONSTRAINT_TYPE SMALLINT NOT NULL,
1002  UPDATE_RULE SMALLINT,
1003  DELETE_RULE SMALLINT,
1004  ENABLE_VALIDATE_RELY SMALLINT NOT NULL
1005) ;
1006
1007ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CONSTRAINT_NAME, POSITION);
1008
1009CREATE INDEX CONSTRAINTS_PARENT_TBL_ID__INDEX ON KEY_CONSTRAINTS(PARENT_TBL_ID);
1010
1011CREATE TABLE WRITE_SET (
1012  WS_DATABASE nvarchar(128) NOT NULL,
1013  WS_TABLE nvarchar(128) NOT NULL,
1014  WS_PARTITION nvarchar(767),
1015  WS_TXNID bigint NOT NULL,
1016  WS_COMMIT_ID bigint NOT NULL,
1017  WS_OPERATION_TYPE char(1) NOT NULL
1018);
1019
1020
1021-- -----------------------------------------------------------------
1022-- Record schema version. Should be the last step in the init script
1023-- -----------------------------------------------------------------
1024INSERT INTO VERSION (VER_ID, SCHEMA_VERSION, VERSION_COMMENT) VALUES (1, '2.3.0', 'Hive release version 2.3.0');
1025"""

Cell 2. Get Connection Parameters.

These are parameters of sql server you have created in Azure.

1val server = "server-name"
2val jdbcDatabase = "meta"
3val username = "admin username"
4val password = "admin password"

Cell 3. Execute the DDL

 1import java.util.Properties
 2import java.sql.DriverManager
 3
 4val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
 5val jdbcHostname = "server-name.database.windows.net"
 6val jdbcPort = 1433
 7val jdbcUrl = "jdbc:sqlserver://" + jdbcHostname + ":" + jdbcPort + ";database=" + jdbcDatabase + ";user=" + username + ";password=" + password
 8val connectionProperties = new Properties()
 9connectionProperties.put("user", username)
10connectionProperties.put("password", password)
11connectionProperties.setProperty("Driver", driverClass)
12
13val connection = DriverManager.getConnection(jdbcUrl, username, password)
14val stmt = connection.createStatement()
15
16stmt.execute(script)
17connection.close()

At this point, you database should be populated with necessary tables.

Enforce Metastore on All Clusters

In order to transparently force all the clusters to use the metastore, you can create a global init script (from admin console). This will run before cluster starts.

Here is the content of the script:

 1# Loads environment variables to determine the correct JDBC driver to use.
 2source /etc/environment
 3# Quoting the label (i.e. EOF) with single quotes to disable variable interpolation.
 4cat << 'EOF' > /databricks/driver/conf/00-custom-spark.conf
 5[driver] {
 6    # Hive specific configuration options.
 7    # spark.hadoop prefix is added to make sure these Hive specific options will propagate to the metastore client.
 8    # JDBC connect string for a JDBC metastore
 9    "spark.hadoop.javax.jdo.option.ConnectionURL" = "jdbc:sqlserver://server-name.database.windows.net:1433;database=meta;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
10
11    # Username to use against metastore database
12    "spark.hadoop.javax.jdo.option.ConnectionUserName" = "mssql-username"
13
14    # Password to use against metastore database
15    "spark.hadoop.javax.jdo.option.ConnectionPassword" = "mssql-password"
16
17    # Driver class name for a JDBC metastore
18    "spark.hadoop.javax.jdo.option.ConnectionDriverName" = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
19
20    # Spark specific configuration options
21    "spark.sql.hive.metastore.version" = "2.3.7"
22    "spark.sql.hive.metastore.jars" = "builtin"
23}
24EOF

and replace server, database and credentials to yours. Note that this is using built-in hive metastore jars, so your cluster won’t need to download anything unlike the official documentation says.

Enjoy

Restart your clusters and enjoy the custom metastore.

Have feedback or questions? Feel free to email me.