fintech-app / initialize_db /load_data.sql
Jiahao123's picture
add files for deployment
16652be
Raw
History Blame Contribute Delete
4.48 kB
-- create all tables here first
-- sql code here
CREATE TABLE IF NOT EXISTS customers(
customer_id VARCHAR(256) PRIMARY KEY,
customer_type VARCHAR(256) NOT NULL,
investment_capacity VARCHAR(256) NOT NULL,
risk_level VARCHAR(256) NOT NULL,
timestamp DATE
);
CREATE TABLE IF NOT EXISTS assets(
ISIN VARCHAR(256),
asset_short_name VARCHAR(256),
sector VARCHAR(256),
industry VARCHAR(256),
timestamp DATE,
asset_sub_category VARCHAR(256),
asset_category VARCHAR(256) NOT NULL,
market_id VARCHAR(256) NOT NULL,
asset_name VARCHAR(256), -- NOT NULL
PRIMARY KEY(ISIN)
);
CREATE TABLE IF NOT EXISTS markets(
market_id VARCHAR(256) PRIMARY KEY,
exchange_id VARCHAR(256) NOT NULL,
name VARCHAR(256) NOT NULL,
description VARCHAR(500) NOT NULL,
country VARCHAR(256),
trading_days VARCHAR(256) NOT NULL,
trading_hours VARCHAR(256),
market_class VARCHAR(256) NOT NULL
);
CREATE TABLE IF NOT EXISTS transactions(
transaction_id VARCHAR(256),
customer_id VARCHAR(256),
market_id VARCHAR(256),
ISIN VARCHAR(256),
asset_name VARCHAR(256),
channel VARCHAR(256) NOT NULL,
units INT NOT NULL,
transaction_type VARCHAR(256) NOT NULL,
total_value NUMERIC(15, 5),
timestamp DATE,
PRIMARY KEY(transaction_id, customer_id),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE DEFERRABLE,
FOREIGN KEY (market_id) REFERENCES markets(market_id) ON DELETE CASCADE DEFERRABLE,
FOREIGN KEY (ISIN) REFERENCES assets(ISIN) ON DELETE CASCADE DEFERRABLE
);
-- got to do this because the csv files header names different from what we want in the db
-- create temp tables
-- CUSTOMERS TABLE
CREATE TABLE staging_customers_table (
customerID TEXT,
customerType TEXT,
riskLevel TEXT,
investmentCapacity TEXT,
lastQuestionnaireDate TIMESTAMP,
timestamp TIMESTAMP
);
COPY staging_customers_table FROM '/data/customer_information.csv' DELIMITER ',' CSV HEADER;
INSERT INTO customers (customer_id, customer_type, risk_level, investment_capacity, timestamp)
SELECT DISTINCT ON (customerID)
customerID,
customerType,
riskLevel,
investmentCapacity,
timestamp
FROM staging_customers_table
ORDER BY customerID, timestamp DESC;
-- drop temp table
DROP TABLE staging_customers_table;
-- ASSETS TABLE
-- original
-- ISIN assetName assetShortName assetCategory assetSubCategory marketID sector industry timestamp tavily_search_results content errors ticker description
CREATE TABLE staging_assets_table (
ISIN TEXT,
assetName TEXT,
assetShortName TEXT,
assetCategory TEXT,
assetSubCategory TEXT,
marketID TEXT,
sector TEXT,
industry TEXT,
timestamp TIMESTAMP
);
COPY staging_assets_table FROM '/data/asset_information.csv' DELIMITER ',' CSV HEADER;
INSERT INTO assets (ISIN, asset_name, asset_short_name, asset_category, asset_sub_category, market_id, sector, industry, timestamp)
SELECT DISTINCT ON (ISIN)
ISIN,
assetName,
assetShortName,
assetCategory,
assetSubCategory,
marketID,
sector,
industry,
timestamp
FROM staging_assets_table
ORDER BY ISIN, timestamp DESC;
DROP TABLE staging_assets_table;
-- MARKETS TABLE
CREATE TABLE staging_markets_table (
exchangeID TEXT,
marketID TEXT,
name TEXT,
description TEXT,
country TEXT,
tradingDays TEXT,
tradingHours TEXT,
marketClass TEXT
);
COPY staging_markets_table FROM '/data/markets.csv' DELIMITER ',' CSV HEADER;
INSERT INTO markets (exchange_id, market_id, name, description, country, trading_days, trading_hours, market_class)
SELECT exchangeID, marketID, name, description, country, tradingDays, tradingHours, marketClass
FROM staging_markets_table;
DROP TABLE staging_markets_table;
-- TRANSACTIONS TABLE
CREATE TABLE staging_transactions_table (
customerID TEXT,
ISIN TEXT,
transactionID TEXT,
transactionType TEXT,
timestamp TIMESTAMP,
totalValue NUMERIC,
units NUMERIC,
channel TEXT,
marketID TEXT
);
COPY staging_transactions_table FROM '/data/transactions.csv' DELIMITER ',' CSV HEADER;
INSERT INTO transactions (customer_id, ISIN, transaction_id, transaction_type, timestamp, total_value, units, channel, market_id)
SELECT customerID, ISIN, transactionID, transactionType, timestamp, totalValue, units, channel, marketID
FROM staging_transactions_table;
DROP TABLE staging_transactions_table;