1
+ #! /bin/bash
2
+
3
+ # Parse arguments
4
+ while [[ $# -gt 0 ]]; do
5
+ case " $1 " in
6
+ --dsn)
7
+ DSN=" $2 "
8
+ shift 2
9
+ ;;
10
+ --stage)
11
+ STAGE=" $2 "
12
+ shift 2
13
+ ;;
14
+ * )
15
+ if [[ " $1 " =~ ^[0-9]{8}$ ]]; then
16
+ DATE_ARG=" $1 "
17
+ shift
18
+ else
19
+ echo " Unknown parameter: $1 "
20
+ exit 1
21
+ fi
22
+ ;;
23
+ esac
24
+ done
25
+
26
+ # Check required parameters
27
+ if [[ -z " $STAGE " || -z " $DATE_ARG " ]]; then
28
+ echo " Missing required parameters: --stage or yyyymmdd date"
29
+ exit 1
30
+ fi
31
+
32
+ # If DSN not provided, try to get from environment variable
33
+ if [[ -z " $DSN " ]]; then
34
+ DSN=" $BENDSQL_DSN "
35
+ if [[ -z " $DSN " ]]; then
36
+ echo " --dsn parameter not provided and BENDSQL_DSN environment variable not set"
37
+ exit 1
38
+ fi
39
+ fi
40
+
41
+ # Format date
42
+ YEAR=${DATE_ARG: 0: 4}
43
+ MONTH=${DATE_ARG: 4: 2}
44
+ DAY=${DATE_ARG: 6: 2}
45
+ FORMATTED_DATE=" ${YEAR} -${MONTH} -${DAY} "
46
+
47
+ # 1. Get download presigned URL
48
+ DOWNLOAD_SQL=" PRESIGN DOWNLOAD @${STAGE} /data_${FORMATTED_DATE} .tar.gz"
49
+ DOWNLOAD_URL=$( bendsql --dsn " ${DSN} " --query=" ${DOWNLOAD_SQL} " | awk ' {print $3}' )
50
+
51
+ if [[ -z " $DOWNLOAD_URL " ]]; then
52
+ echo " Failed to get download URL"
53
+ exit 1
54
+ fi
55
+
56
+ # 2. Download the file
57
+ TAR_FILE=" data_${FORMATTED_DATE} .tar.gz"
58
+ echo " Downloading file: ${TAR_FILE} "
59
+ curl -o " ${TAR_FILE} " " ${DOWNLOAD_URL} "
60
+
61
+ if [[ ! -f " ${TAR_FILE} " ]]; then
62
+ echo " File download failed"
63
+ exit 1
64
+ fi
65
+
66
+ # 3. Extract the file
67
+ echo " Extracting file: ${TAR_FILE} "
68
+ TEMP_DIR=" temp_extracted_${DATE_ARG} "
69
+ mkdir -p " ${TEMP_DIR} "
70
+ tar -xzf " ${TAR_FILE} " -C " ${TEMP_DIR} "
71
+
72
+ # 4. Process and upload each file
73
+ UPLOAD_STAGE=" ${STAGE} _${YEAR} _${MONTH} _${DAY} "
74
+
75
+ bendsql --dsn " ${DSN} " --query=" DROP STAGE IF EXISTS ${UPLOAD_STAGE} "
76
+ bendsql --dsn " ${DSN} " --query=" CREATE STAGE ${UPLOAD_STAGE} "
77
+
78
+ find " ${TEMP_DIR} " -type f | while read -r FILE; do
79
+ RELATIVE_PATH=" ${FILE# ${TEMP_DIR} / } "
80
+
81
+ # Get upload presigned URL
82
+ UPLOAD_SQL=" PRESIGN UPLOAD @${UPLOAD_STAGE} /${RELATIVE_PATH} "
83
+ UPLOAD_URL=$( bendsql --dsn " ${DSN} " --query=" ${UPLOAD_SQL} " | awk ' {print $3}' )
84
+
85
+ if [[ -z " $UPLOAD_URL " ]]; then
86
+ echo " Failed to get upload URL for: ${RELATIVE_PATH} "
87
+ continue
88
+ fi
89
+
90
+ echo " Uploading file: ${RELATIVE_PATH} "
91
+ curl -X PUT -T " ${FILE} " " ${UPLOAD_URL} "
92
+
93
+ if [[ $? -eq 0 ]]; then
94
+ echo " Upload successful: ${RELATIVE_PATH} "
95
+ else
96
+ echo " Upload failed: ${RELATIVE_PATH} "
97
+ fi
98
+ done
99
+
100
+ # Cleanup temporary files
101
+ echo " Cleaning up temporary files"
102
+ rm -rf " ${TEMP_DIR} "
103
+ rm -f " ${TAR_FILE} "
104
+ echo " Temporary files cleanup is finished."
105
+
106
+ RESTORE_DATABASE=" ${STAGE} _${YEAR} _${MONTH} _${DAY} "
107
+ bendsql --dsn " ${DSN} " --query=" DROP DATABASE IF EXISTS ${RESTORE_DATABASE} "
108
+ bendsql --dsn " ${DSN} " --query=" CREATE DATABASE ${RESTORE_DATABASE} "
109
+
110
+ echo " Restoring the '${RESTORE_DATABASE} .columns' table..."
111
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" create table columns like system.columns;"
112
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" COPY INTO columns FROM @${UPLOAD_STAGE} /columns;"
113
+ echo " The '${RESTORE_DATABASE} .columns' table has been successfully restored"
114
+
115
+ echo " Restoring the '${RESTORE_DATABASE} .user_functions' table..."
116
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" create table user_functions like system.user_functions;"
117
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" COPY INTO user_functions FROM @${UPLOAD_STAGE} /user_functions;"
118
+ echo " The '${RESTORE_DATABASE} .user_functions' table has been successfully restored"
119
+
120
+ echo " Restoring the '${RESTORE_DATABASE} .log_history' table..."
121
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" create table log_history like system_history.log_history;"
122
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" COPY INTO log_history FROM @${UPLOAD_STAGE} /query_raw_logs;"
123
+ echo " The '${RESTORE_DATABASE} .log_history' table has been successfully restored"
124
+
125
+ echo " Restoring the '${RESTORE_DATABASE} .query_history' table..."
126
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" create table query_history like system_history.query_history;"
127
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" COPY INTO query_history FROM @${UPLOAD_STAGE} /query_logs;"
128
+ echo " The '${RESTORE_DATABASE} .query_history' table has been successfully restored"
129
+
130
+ echo " Restoring the '${RESTORE_DATABASE} .profile_history' table..."
131
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" create table profile_history like system_history.profile_history;"
132
+ bendsql --dsn " ${DSN} " --database " ${RESTORE_DATABASE} " --query=" COPY INTO profile_history FROM @${UPLOAD_STAGE} /query_profile_logs;"
133
+ echo " The '${RESTORE_DATABASE} .profile_history' table has been successfully restored"
134
+
135
+ echo " Processing completed"
0 commit comments