@@ -2,8 +2,9 @@
|
|||||||
# Bulk copy one SQL Server table to ClickHouse on Ubuntu (or Debian-based).
|
# Bulk copy one SQL Server table to ClickHouse on Ubuntu (or Debian-based).
|
||||||
#
|
#
|
||||||
# Prerequisites (or run with --install-deps):
|
# Prerequisites (or run with --install-deps):
|
||||||
# - sqlcmd: Microsoft mssql-tools18 (/opt/mssql-tools18/bin/sqlcmd)
|
# - sqlcmd: Microsoft mssql-tools18 (/opt/mssql-tools18/bin/sqlcmd) or mssql-tools (/opt/mssql-tools/bin)
|
||||||
# - clickhouse-client
|
# - clickhouse-client
|
||||||
|
# Optional: SQLCMD_PATH=/full/path/to/sqlcmd if installed outside PATH
|
||||||
#
|
#
|
||||||
# Environment (required for export-import):
|
# Environment (required for export-import):
|
||||||
# MSSQL_HOST e.g. db.example.com
|
# MSSQL_HOST e.g. db.example.com
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
# CH_USER default default
|
# CH_USER default default
|
||||||
# CH_PASSWORD optional
|
# CH_PASSWORD optional
|
||||||
# CH_SECURE set to 1 to use TLS (--secure)
|
# CH_SECURE set to 1 to use TLS (--secure)
|
||||||
|
# SQLCMD_PATH optional full path to sqlcmd if not on PATH
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
# export MSSQL_HOST=sql.mycompany.internal MSSQL_USER=ro MSSQL_PASSWORD='***' MSSQL_DATABASE=sales
|
# export MSSQL_HOST=sql.mycompany.internal MSSQL_USER=ro MSSQL_PASSWORD='***' MSSQL_DATABASE=sales
|
||||||
@@ -46,7 +48,7 @@ usage() {
|
|||||||
$SCRIPT_NAME — export SQL Server data to TSV and load into ClickHouse (Ubuntu/Debian).
|
$SCRIPT_NAME — export SQL Server data to TSV and load into ClickHouse (Ubuntu/Debian).
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
--install-deps Install mssql-tools18 + clickhouse-client (needs sudo)
|
--install-deps Install mssql-tools18 + clickhouse-client (needs sudo). Run alone FIRST, then migrate-db.
|
||||||
export Export MSSQL table/query to TSV (TabSeparated)
|
export Export MSSQL table/query to TSV (TabSeparated)
|
||||||
import Load TSV into ClickHouse (INSERT FORMAT TabSeparated)
|
import Load TSV into ClickHouse (INSERT FORMAT TabSeparated)
|
||||||
export-import Run export then import
|
export-import Run export then import
|
||||||
@@ -72,6 +74,7 @@ Environment:
|
|||||||
MSSQL_TABLES_FILE optional explicit table list path for migrate-db
|
MSSQL_TABLES_FILE optional explicit table list path for migrate-db
|
||||||
CH_HOST, CH_PORT, CH_USER, CH_PASSWORD, CH_SECURE=1 for TLS
|
CH_HOST, CH_PORT, CH_USER, CH_PASSWORD, CH_SECURE=1 for TLS
|
||||||
CH_DOCKER_CONTAINER optional; run clickhouse-client inside this container
|
CH_DOCKER_CONTAINER optional; run clickhouse-client inside this container
|
||||||
|
SQLCMD_PATH optional; full path to sqlcmd when not on PATH
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
- ClickHouse columns must match export order and types.
|
- ClickHouse columns must match export order and types.
|
||||||
@@ -81,14 +84,23 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
ensure_sqlcmd() {
|
ensure_sqlcmd() {
|
||||||
|
if [[ -n "${SQLCMD_PATH:-}" ]]; then
|
||||||
|
[[ -x "$SQLCMD_PATH" ]] || die "SQLCMD_PATH is set but not executable: $SQLCMD_PATH"
|
||||||
|
export PATH="$(dirname "$SQLCMD_PATH"):$PATH"
|
||||||
|
fi
|
||||||
if command -v sqlcmd >/dev/null 2>&1; then
|
if command -v sqlcmd >/dev/null 2>&1; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
if [[ -x /opt/mssql-tools18/bin/sqlcmd ]]; then
|
local d
|
||||||
export PATH="/opt/mssql-tools18/bin:$PATH"
|
for d in /opt/mssql-tools18/bin /opt/mssql-tools/bin; do
|
||||||
|
if [[ -x "$d/sqlcmd" ]]; then
|
||||||
|
export PATH="$d:$PATH"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
die "sqlcmd not found. Install mssql-tools18 or run: $0 --install-deps"
|
done
|
||||||
|
die "sqlcmd not found. On this host run once (needs sudo), then open a new shell or re-login:
|
||||||
|
$0 --install-deps
|
||||||
|
If sqlcmd is already installed, add it to PATH or set SQLCMD_PATH=/path/to/sqlcmd"
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_clickhouse_client() {
|
ensure_clickhouse_client() {
|
||||||
@@ -502,17 +514,28 @@ install_deps() {
|
|||||||
[[ "${ID:-}" == "ubuntu" || "${ID:-}" == "debian" || "${ID_LIKE:-}" == *"debian"* ]] \
|
[[ "${ID:-}" == "ubuntu" || "${ID:-}" == "debian" || "${ID_LIKE:-}" == *"debian"* ]] \
|
||||||
|| die "This installer expects Ubuntu or Debian."
|
|| die "This installer expects Ubuntu or Debian."
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
$SUDO apt-get update
|
$SUDO apt-get update
|
||||||
$SUDO apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
$SUDO apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
||||||
|
|
||||||
# Microsoft ODBC + sqlcmd
|
# Microsoft ODBC + sqlcmd (Ubuntu codename: use current release; fall back if MS has no prod.list yet)
|
||||||
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
|
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
|
||||||
| $SUDO gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
|
| $SUDO gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
|
||||||
curl -fsSL "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list" \
|
local ms_ub ms_url
|
||||||
| $SUDO tee /etc/apt/sources.list.d/mssql-release.list >/dev/null
|
ms_ub="$(lsb_release -rs)"
|
||||||
|
ms_url="https://packages.microsoft.com/config/ubuntu/${ms_ub}/prod.list"
|
||||||
|
if ! curl -fsSL "$ms_url" -o /tmp/mssql-release.list 2>/dev/null; then
|
||||||
|
echo "$SCRIPT_NAME: No Microsoft prod.list for Ubuntu ${ms_ub}; trying 22.04 repo (packages often install on newer LTS)." >&2
|
||||||
|
ms_ub="22.04"
|
||||||
|
ms_url="https://packages.microsoft.com/config/ubuntu/${ms_ub}/prod.list"
|
||||||
|
curl -fsSL "$ms_url" -o /tmp/mssql-release.list
|
||||||
|
fi
|
||||||
|
$SUDO mv /tmp/mssql-release.list /etc/apt/sources.list.d/mssql-release.list
|
||||||
$SUDO apt-get update
|
$SUDO apt-get update
|
||||||
ACCEPT_EULA=Y $SUDO apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev
|
ACCEPT_EULA=Y $SUDO apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev
|
||||||
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >>"$HOME/.bashrc" || true
|
local path_line='export PATH="$PATH:/opt/mssql-tools18/bin"'
|
||||||
|
grep -qF 'mssql-tools18/bin' "$HOME/.bashrc" 2>/dev/null || echo "$path_line" >>"$HOME/.bashrc" || true
|
||||||
|
grep -qF 'mssql-tools18/bin' "$HOME/.profile" 2>/dev/null || echo "$path_line" >>"$HOME/.profile" || true
|
||||||
export PATH="$PATH:/opt/mssql-tools18/bin"
|
export PATH="$PATH:/opt/mssql-tools18/bin"
|
||||||
|
|
||||||
# ClickHouse client
|
# ClickHouse client
|
||||||
|
|||||||
Reference in New Issue
Block a user