blob: 9b4b6da116ff8336edd3f4f4cc011781d4cd3e21 [file] [log] [blame]
#!/bin/bash
#
# 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.
#
# This script create and load the jdbc data source target table in Postgres.
set -euo pipefail
. $IMPALA_HOME/bin/report_build_error.sh
setup_report_build_error
. ${IMPALA_HOME}/bin/impala-config.sh > /dev/null 2>&1
# Create functional.alltype table
dropdb -U hiveuser functional || true
createdb -U hiveuser functional
# Create jdbc table
cat > /tmp/jdbc_alltypes.sql <<__EOT__
DROP TABLE IF EXISTS alltypes;
CREATE TABLE alltypes
(
id INT,
bool_col BOOLEAN,
tinyint_col SMALLINT,
smallint_col SMALLINT,
int_col INT,
bigint_col BIGINT,
float_col FLOAT,
double_col DOUBLE PRECISION,
date_col DATE,
string_col VARCHAR(10),
timestamp_col TIMESTAMP
);
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_alltypes.sql
# Create jdbc table with case sensitive names for table and columns.
cat > /tmp/jdbc_alltypes_with_quote.sql <<__EOT__
DROP TABLE IF EXISTS "AllTypesWithQuote";
CREATE TABLE "AllTypesWithQuote"
(
"id" INT,
"Bool_col" BOOLEAN,
"Tinyint_col" SMALLINT,
"Smallint_col" SMALLINT,
"Int_col" INT,
"Bigint_col" BIGINT,
"Float_col" FLOAT,
"Double_col" DOUBLE PRECISION,
"date_col" DATE,
"String_col" VARCHAR(10),
"Timestamp_col" TIMESTAMP
);
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_alltypes_with_quote.sql
# Create a table with decimal type of columns
cat > /tmp/jdbc_decimal_tbl.sql <<__EOT__
DROP TABLE IF EXISTS decimal_tbl;
CREATE TABLE decimal_tbl
(
d1 DECIMAL(9,0),
d2 DECIMAL(10,0),
d3 DECIMAL(20,10),
d4 DECIMAL(38,38),
d5 DECIMAL(10,5)
);
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_decimal_tbl.sql
# Create test_strategy table for unit test
cat > /tmp/jdbc_test_strategy.sql << __EOT__
DROP TABLE IF EXISTS test_strategy;
CREATE TABLE test_strategy
(
strategy_id INT,
name VARCHAR(50),
referrer VARCHAR(1024),
landing VARCHAR(1024),
priority INT,
implementation VARCHAR(512),
last_modified timestamp,
PRIMARY KEY (strategy_id)
);
INSERT INTO test_strategy (strategy_id, name, referrer, landing, priority,
implementation, last_modified) VALUES
(1, 'S1', 'aaa', 'abc', 1000, NULL, '2012-05-08 15:01:15'),
(2, 'S2', 'bbb', 'def', 990, NULL, '2012-05-08 15:01:15'),
(3, 'S3', 'ccc', 'ghi', 1000, NULL, '2012-05-08 15:01:15'),
(4, 'S4', 'ddd', 'jkl', 980, NULL, '2012-05-08 15:01:15'),
(5, 'S5', 'eee', NULL, NULL, NULL, '2012-05-08 15:01:15');
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_test_strategy.sql
# Create quoted_impala
cat > /tmp/jdbc_quoted_impala.sql << __EOT__
DROP TABLE IF EXISTS quoted_impala;
CREATE TABLE quoted_impala
(
strategy_id INT,
name VARCHAR(50),
referrer VARCHAR(1024),
landing VARCHAR(1024),
priority INT,
"freeze" VARCHAR(512),
last_modified timestamp,
PRIMARY KEY (strategy_id)
);
INSERT INTO quoted_impala (strategy_id, name, referrer, landing, priority,
"freeze", last_modified) VALUES
(1, 'S1', 'aaa', 'abc', 1000, NULL, '2012-05-08 15:01:15'),
(2, 'S2', 'bbb', 'def', 990, NULL, '2012-05-08 15:01:15'),
(3, 'S3', 'ccc', 'ghi', 1000, NULL, '2012-05-08 15:01:15'),
(4, 'S4', 'ddd', 'jkl', 980, NULL, '2012-05-08 15:01:15'),
(5, 'S5', 'eee', NULL, NULL, NULL, '2012-05-08 15:01:15');
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_quoted_impala.sql
# Create quoted_col table
cat > /tmp/quoted_col.sql << __EOT__
DROP TABLE IF EXISTS quoted_col;
CREATE TABLE quoted_col
(
id int,
name varchar(20),
bool_col BOOLEAN,
tinyint_col SMALLINT,
smallint_col SMALLINT,
int_col INT,
bigint_col BIGINT,
float_col FLOAT,
double_col DOUBLE PRECISION,
date_col DATE,
"freeze" VARCHAR(10),
timestamp_col TIMESTAMP
);
INSERT INTO quoted_col (id, name, bool_col, tinyint_col, smallint_col, int_col,
bigint_col, float_col, double_col, date_col, "freeze", timestamp_col)
VALUES
(1, 'India', TRUE, 10, 100, 1000, 10000, 1.1, 1.11, '2024-01-01',
'IN', '2024-01-01 10:00:00'),
(2, 'Russia', FALSE, 20, 200, 2000, 20000, 2.2, 2.22, '2024-02-01',
'RU', '2024-02-01 11:00:00'),
(3, 'USA', TRUE, 30, 300, 3000, 30000, 3.3, 3.33, '2024-03-01',
'US', '2024-03-01 12:00:00');
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/quoted_col.sql
# Create country table
cat > /tmp/jdbc_country.sql << __EOT__
DROP TABLE IF EXISTS country;
CREATE TABLE country
(
id int,
name varchar(20),
bool_col BOOLEAN,
tinyint_col SMALLINT,
smallint_col SMALLINT,
int_col INT,
bigint_col BIGINT,
float_col FLOAT,
double_col DOUBLE PRECISION,
date_col DATE,
string_col VARCHAR(10),
timestamp_col TIMESTAMP
);
INSERT INTO country (id, name, bool_col, tinyint_col, smallint_col, int_col,
bigint_col, float_col, double_col, date_col, string_col, timestamp_col)
VALUES
(1, 'India', TRUE, 10, 100, 1000, 10000, 1.1, 1.11, '2024-01-01',
'IN', '2024-01-01 10:00:00'),
(2, 'Russia', FALSE, 20, 200, 2000, 20000, 2.2, 2.22, '2024-02-01',
'RU', '2024-02-01 11:00:00'),
(3, 'USA', TRUE, 30, 300, 3000, 30000, 3.3, 3.33, '2024-03-01',
'US', '2024-03-01 12:00:00');
__EOT__
sudo -u postgres psql -U hiveuser -d functional -f /tmp/jdbc_country.sql
# Load data to jdbc table
cat ${IMPALA_HOME}/testdata/target/AllTypes/* > /tmp/jdbc_alltypes.csv
loadCmd="\COPY alltypes FROM '/tmp/jdbc_alltypes.csv' DELIMITER ',' CSV"
sudo -u postgres psql -d functional -c "$loadCmd"
loadCmd="\COPY \"AllTypesWithQuote\" FROM '/tmp/jdbc_alltypes.csv' DELIMITER ',' CSV"
sudo -u postgres psql -d functional -c "$loadCmd"
cat ${IMPALA_HOME}/testdata/data/decimal_tbl.txt > /tmp/jdbc_decimal_tbl.csv
loadCmd="\COPY decimal_tbl FROM '/tmp/jdbc_decimal_tbl.csv' DELIMITER ',' CSV"
sudo -u postgres psql -d functional -c "$loadCmd"
# Create impala tables and load data
cat > /tmp/impala_jdbc_alltypes.sql <<__EOT__
USE FUNCTIONAL;
DROP TABLE IF EXISTS alltypes_with_date;
CREATE TABLE alltypes_with_date
(
id INT,
bool_col BOOLEAN,
tinyint_col SMALLINT,
smallint_col SMALLINT,
int_col INT,
bigint_col BIGINT,
float_col FLOAT,
double_col DOUBLE,
date_col DATE,
string_col STRING,
timestamp_col TIMESTAMP
) STORED as PARQUET;
INSERT INTO alltypes_with_date
SELECT id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col,
double_col, CAST(to_timestamp(date_string_col, 'MM/dd/yy') as DATE), string_col,
timestamp_col
FROM FUNCTIONAL.alltypes;
__EOT__
IMPALAD=${IMPALAD:-localhost}
${IMPALA_HOME}/bin/impala-shell.sh -i ${IMPALAD} -f /tmp/impala_jdbc_alltypes.sql
# Clean tmp files
rm /tmp/jdbc_alltypes.*
rm /tmp/jdbc_alltypes_with_quote.*
rm /tmp/jdbc_decimal_tbl.*
rm /tmp/jdbc_test_strategy.*
rm /tmp/jdbc_country.*
rm /tmp/impala_jdbc_alltypes.sql