first commit
This commit is contained in:
Executable
+99
@@ -0,0 +1,99 @@
|
||||
#!/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)."
|
||||
Reference in New Issue
Block a user