100 lines
5.3 KiB
Bash
Executable File
100 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# eBdesk SiCABE — Seed Sumber PostgreSQL: sicabe_data.public.orders
|
|
# =============================================================================
|
|
# Membuat database `sicabe_data` + tabel `public.orders` (8 kolom, konsisten
|
|
# dengan dbt sources.yml dan tabel Iceberg `bronze.orders`) lalu mengisinya
|
|
# dengan 6 baris contoh.
|
|
#
|
|
# Tabel ini adalah SUMBER untuk tugas DAG `sicabe_batch_daily.ingest_to_bronze`
|
|
# (Sling: POSTGRES_DB.public.orders → ICEBERG bronze.orders).
|
|
#
|
|
# CATATAN: `scripts/seed-sample-data.sh` mengisi sisi Iceberg (bronze.orders)
|
|
# secara langsung — script INI mengisi sisi PostgreSQL (sumbernya), sehingga
|
|
# jalur Sling → Iceberg → dbt → GE dapat berjalan end-to-end.
|
|
#
|
|
# Idempoten: aman dijalankan berulang (CREATE ... IF NOT EXISTS; INSERT hanya
|
|
# bila tabel kosong).
|
|
#
|
|
# Pemakaian:
|
|
# cd deploy
|
|
# ./scripts/seed-source-postgres.sh
|
|
#
|
|
# Env opsional (ada default):
|
|
# PG_CONTAINER (sicabe-postgres), SEED_SOURCE_DB (sicabe_data),
|
|
# SEED_SOURCE_TABLE (orders), POSTGRES_USER (sicabe_admin)
|
|
# =============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
# shellcheck source=../lib/common.sh
|
|
source "${SCRIPT_DIR}/lib/common.sh"
|
|
# shellcheck source=../config/environment.defaults.sh
|
|
source "${SCRIPT_DIR}/config/environment.defaults.sh"
|
|
sicabe_load_env "${SCRIPT_DIR}" "$@"
|
|
|
|
PG_CONTAINER="${PG_CONTAINER:-sicabe-postgres}"
|
|
SEED_DB="${SEED_SOURCE_DB:-sicabe_data}"
|
|
SEED_TABLE="${SEED_SOURCE_TABLE:-orders}"
|
|
PG_USER="${POSTGRES_USER:-sicabe_admin}"
|
|
|
|
# Multi-host: PostgreSQL ada di host `state` dan `docker exec` bersifat lokal →
|
|
# bila bukan di host ini, beri instruksi & keluar rapi (kode 3), bukan gagal.
|
|
sicabe_require_local_container "${PG_CONTAINER}" "PostgreSQL" "state" || exit $?
|
|
|
|
on_err() { echo -e "${ERR} Gagal pada baris $1."; exit 1; }
|
|
trap 'on_err $LINENO' ERR
|
|
|
|
# psql di dalam container (tanpa password: koneksi lokal container).
|
|
pg() { docker exec -i "${PG_CONTAINER}" psql -v ON_ERROR_STOP=1 -qtA -U "${PG_USER}" "$@"; }
|
|
|
|
echo -e "${BOLD}${BLUE}=== Seed Sumber PostgreSQL: ${SEED_DB}.public.${SEED_TABLE} ===${NC}"
|
|
|
|
# ─── [1/3] Database ─────────────────────────────────────────────────────────
|
|
echo -e "${INFO} [1/3] Database '${SEED_DB}'..."
|
|
if [[ "$(pg -d postgres -c "SELECT 1 FROM pg_database WHERE datname='${SEED_DB}'")" == "1" ]]; then
|
|
echo -e "${OK} Database '${SEED_DB}' sudah ada."
|
|
else
|
|
pg -d postgres -c "CREATE DATABASE ${SEED_DB} OWNER ${PG_USER}" >/dev/null
|
|
echo -e "${OK} Database '${SEED_DB}' dibuat."
|
|
fi
|
|
|
|
# ─── [2/3] Tabel sumber ─────────────────────────────────────────────────────
|
|
echo -e "${INFO} [2/3] Tabel 'public.${SEED_TABLE}'..."
|
|
pg -d "${SEED_DB}" -c "CREATE TABLE IF NOT EXISTS public.${SEED_TABLE} (
|
|
id bigint PRIMARY KEY,
|
|
order_date date,
|
|
komoditas varchar(64),
|
|
harga_per_kg double precision,
|
|
stok_kg bigint,
|
|
region varchar(64),
|
|
created_at timestamp,
|
|
updated_at timestamp
|
|
)" >/dev/null
|
|
echo -e "${OK} Tabel 'public.${SEED_TABLE}' siap."
|
|
|
|
# ─── [3/3] Data contoh ──────────────────────────────────────────────────────
|
|
echo -e "${INFO} [3/3] Data contoh (bila kosong)..."
|
|
COUNT="$(pg -d "${SEED_DB}" -c "SELECT count(*) FROM public.${SEED_TABLE}")"
|
|
if [[ "${COUNT}" -gt 0 ]]; then
|
|
echo -e "${OK} Sudah berisi ${COUNT} baris (skip seed)."
|
|
else
|
|
pg -d "${SEED_DB}" -c "INSERT INTO public.${SEED_TABLE} VALUES
|
|
(1, DATE '2026-09-01', 'beras', 12000.0, 500, 'jakarta', TIMESTAMP '2026-09-01 08:00:00', TIMESTAMP '2026-09-01 08:00:00'),
|
|
(2, DATE '2026-09-01', 'gula', 15000.0, 300, 'bandung', TIMESTAMP '2026-09-01 09:00:00', TIMESTAMP '2026-09-01 09:00:00'),
|
|
(3, DATE '2026-09-02', 'minyak', 18000.0, 200, 'surabaya', TIMESTAMP '2026-09-02 08:00:00', TIMESTAMP '2026-09-02 08:00:00'),
|
|
(4, DATE '2026-09-02', 'beras', 12500.0, 450, 'jakarta', TIMESTAMP '2026-09-02 10:00:00', TIMESTAMP '2026-09-02 10:00:00'),
|
|
(5, DATE '2026-09-03', 'tepung', 11000.0, 350, 'medan', TIMESTAMP '2026-09-03 08:00:00', TIMESTAMP '2026-09-03 08:00:00'),
|
|
(6, DATE '2026-09-03', 'gula', 15500.0, 250, 'bandung', TIMESTAMP '2026-09-03 11:00:00', TIMESTAMP '2026-09-03 11:00:00')" >/dev/null
|
|
echo -e "${OK} 6 baris contoh dimasukkan."
|
|
fi
|
|
|
|
# ─── Verifikasi ─────────────────────────────────────────────────────────────
|
|
echo -e "${INFO} Verifikasi (sumber PostgreSQL):"
|
|
pg -d "${SEED_DB}" -c "SELECT id, order_date, komoditas, harga_per_kg, stok_kg, region
|
|
FROM public.${SEED_TABLE} ORDER BY id" \
|
|
| while IFS='|' read -r a b c d e f; do printf ' %-3s %-12s %-8s %-10s %-6s %s\n' "$a" "$b" "$c" "$d" "$e" "$f"; done
|
|
|
|
echo -e "${OK} Selesai. Lanjutkan dengan DAG 'sicabe_batch_daily' (task ingest_to_bronze)."
|