序列化僅在商業(yè)版上可用(僅在自托管計(jì)劃上)。
創(chuàng)新互聯(lián)主營(yíng)城中網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app開(kāi)發(fā),城中h5微信小程序定制開(kāi)發(fā)搭建,城中網(wǎng)站營(yíng)銷(xiāo)推廣歡迎城中等地區(qū)企業(yè)咨詢(xún)許多客戶(hù)在遷移到本地部署的商業(yè)版時(shí),需要上載預(yù)定義的問(wèn)題或儀表板,以設(shè)置新的Metabase實(shí)例或新的數(shù)據(jù)庫(kù)連接。本文將介紹如何:
具體來(lái)說(shuō),我們將使用dump
和load
Metabase中的命令序列化功能執(zhí)行第2步和第3步,再加上一點(diǎn)手動(dòng)管理導(dǎo)出的文件。
我們將使用Docker運(yùn)行我們的Metabase環(huán)境,并使用開(kāi)源PostgresSQL為了我們應(yīng)用程序數(shù)據(jù)庫(kù)。我們不建議使用默認(rèn)值H2用于生產(chǎn)的數(shù)據(jù)庫(kù)(H2隨Metabase一起提供,因?yàn)樗且粋€(gè)輕量級(jí)數(shù)據(jù)庫(kù),使用Metabase很容易讓用戶(hù)啟動(dòng)和運(yùn)行)
計(jì)劃我們將創(chuàng)建一個(gè)Metabase實(shí)例(我們的原始環(huán)境),創(chuàng)建一個(gè)儀表板,并將該儀表板加載到一個(gè)新的Metabase實(shí)例(我們的目標(biāo)環(huán)境)中。計(jì)劃如下:
你需要Docker安裝在您的計(jì)算機(jī)上。
步驟1-創(chuàng)建專(zhuān)用網(wǎng)絡(luò)要?jiǎng)?chuàng)建名為“metanet”的專(zhuān)用網(wǎng)絡(luò),請(qǐng)從您選擇的終端運(yùn)行以下命令:
docker network create metanet
您可以確認(rèn)網(wǎng)絡(luò)是用以下方式創(chuàng)建的:
docker network ls
網(wǎng)絡(luò)將有一個(gè)本地作用域和一個(gè)網(wǎng)橋驅(qū)動(dòng)程序。
第2步-啟動(dòng)Metabase的兩個(gè)實(shí)例啟動(dòng)兩個(gè)稱(chēng)為origin
和target
(盡管你可以隨意命名這些環(huán)境)。請(qǐng)注意,我們使用--rm -d在創(chuàng)建這些Docker容器時(shí),當(dāng)您停止它們并在后臺(tái)運(yùn)行時(shí),它們都會(huì)被移除。請(qǐng)隨意更改這些標(biāo)志以修改該行為。
創(chuàng)建Postgres數(shù)據(jù)庫(kù):
docker run --rm -d --name postgres \
-p 5433:5432 \
-e POSTGRES_USER=metabase \
-e POSTGRES_PASSWORD=knockknock \
--network metanet \
postgres:12
創(chuàng)建Metabase源實(shí)例,并將其連接到我們剛剛創(chuàng)建的Postgres數(shù)據(jù)庫(kù):
docker run --rm -d --name metabase-origin \
-p 5001:3000 \
-e MB_DB_TYPE=postgres \
-e MB_DB_DBNAME=metabase \
-e MB_DB_PORT=5432 \
-e MB_DB_USER=metabase \
-e MB_DB_PASS=knockknock \
-e MB_DB_HOST=postgres \
--network metanet \
metabase/metabase-enterprise:v1.44.6
您可以檢查容器的日志以查看容器的進(jìn)度:
docker logs metabase-origin
一旦看到包含“Metabase初始化完成”的行,就可以打開(kāi)瀏覽器http://localhost:5001
查看Metabase實(shí)例。
設(shè)置目標(biāo)環(huán)境與此類(lèi)似。在我們的metanet網(wǎng)絡(luò)上,我們將設(shè)置一個(gè)Postgres數(shù)據(jù)庫(kù)作為我們的應(yīng)用程序數(shù)據(jù)庫(kù),然后在另一個(gè)Docker容器中啟動(dòng)Metabase的另一個(gè)實(shí)例。
注意以下更改:
應(yīng)用程序數(shù)據(jù)庫(kù):
docker run --rm -d --name postgres-target \
-p 5434:5432 \
-e POSTGRES_USER=metabase \
-e POSTGRES_PASSWORD=knockknock \
--network metanet postgres:12
Metabase實(shí)例:
docker run --rm -d --name metabase-target \
-p 5002:3000 \
-e MB_DB_TYPE=postgres \
-e MB_DB_DBNAME=metabase \
-e MB_DB_PORT=5432 \
-e MB_DB_USER=metabase \
-e MB_DB_PASS=knockknock \
-e MB_DB_HOST=postgres-target \
--network metanet \
metabase/metabase-enterprise:v1.44.6
在我們的Metabase實(shí)例完成初始化后,現(xiàn)在應(yīng)該有兩個(gè)Metabase環(huán)境啟動(dòng)并運(yùn)行:
http://localhost:5001
http://localhost:5002
讓我們向metabase-origin實(shí)例添加一個(gè)管理帳戶(hù)和兩個(gè)基本用戶(hù)。
你可以手動(dòng)將用戶(hù)添加到Metabase環(huán)境(例如,在Metabase應(yīng)用程序中),但下面是一個(gè)快速bash腳本,它創(chuàng)建一個(gè)管理用戶(hù)(初始用戶(hù))和兩個(gè)基本用戶(hù):
#!/bin/sh
ADMIN_EMAIL=${MB_ADMIN_EMAIL:-admin@metabase.local}
ADMIN_PASSWORD=${MB_ADMIN_PASSWORD:-Metapass123}
METABASE_HOST=${MB_HOSTNAME}
METABASE_PORT=${MB_PORT:-3000}
echo "?? Waiting for Metabase to start"
while (! curl -s -m 5 http://${METABASE_HOST}:${METABASE_PORT}/api/session/properties -o /dev/null); do sleep 5; done
echo "😎 Creating admin user"
SETUP_TOKEN=$(curl -s -m 5 -X GET \
-H "Content-Type: application/json" \
http://${METABASE_HOST}:${METABASE_PORT}/api/session/properties \
| jq -r '.["setup-token"]'
)
MB_TOKEN=$(curl -s -X POST \
-H "Content-type: application/json" \
http://${METABASE_HOST}:${METABASE_PORT}/api/setup \
-d '{
"token": "'${SETUP_TOKEN}'",
"user": {
"email": "'${ADMIN_EMAIL}'",
"first_name": "Metabase",
"last_name": "Admin",
"password": "'${ADMIN_PASSWORD}'"
},
"prefs": {
"allow_tracking": false,
"site_name": "Metawhat"
}
}' | jq -r '.id')
echo -e "\n👥 Creating some basic users: "
curl -s "http://${METABASE_HOST}:${METABASE_PORT}/api/user" \
-H 'Content-Type: application/json' \
-H "X-Metabase-Session: ${MB_TOKEN}" \
-d '{"first_name":"Basic","last_name":"User","email":"basic@somewhere.com","login_attributes":{"region_filter":"WA"},"password":"'${ADMIN_PASSWORD}'"}'
curl -s "http://${METABASE_HOST}:${METABASE_PORT}/api/user" \
-H 'Content-Type: application/json' \
-H "X-Metabase-Session: ${MB_TOKEN}" \
-d '{"first_name":"Basic 2","last_name":"User","email":"basic2@somewhere.com","login_attributes":{"region_filter":"CA"},"password":"'${ADMIN_PASSWORD}'"}'
echo -e "\n👥 Basic users created!"
你需要安裝jq以處理此腳本中的JSON。將上述代碼另存為create_users.sh,并使其可執(zhí)行(chmod +x create_users.sh),然后運(yùn)行:
MB_HOSTNAME=localhost MB_PORT=5001 ./create_users.sh
當(dāng)您的?metabase-origin實(shí)例啟動(dòng),并且您的用戶(hù)已創(chuàng)建,打開(kāi)http://localhost:5001
并以您創(chuàng)建的管理員用戶(hù)身份登錄。用戶(hù)ID為admin@metabase.local密碼是Metapass123.
您應(yīng)該看到Metabase的一個(gè)新實(shí)例(圖1)。
登錄后,激活許可證密鑰.
步驟3-在origin環(huán)境中創(chuàng)建儀表板和集合我們需要一些應(yīng)用程序數(shù)據(jù)來(lái)導(dǎo)出,所以讓我們使用包括在Metabase中的示例數(shù)據(jù)庫(kù)?;蛘撸孧etabase為我們創(chuàng)建一些儀表板!
如圖2所示,在Try These X-Rays Based On Your Data部分,單擊帶有黃色閃電這說(shuō)明A look at your Products table。Metabase將為您生成一組問(wèn)題,您可以將這些問(wèn)題保存為儀表板。
單擊保存此按鈕,Metabase將把儀表板及其問(wèn)題保存在收集有頭銜的A look at your Products table.
此集合將保存到名為自動(dòng)生成的儀表板
。您可以通過(guò)單擊導(dǎo)航欄左上角的Metabase徽標(biāo)返回主屏幕來(lái)找到此集合。從主頁(yè),在我們的分析部分,單擊自動(dòng)生成的儀表板
第節(jié)。從那里你應(yīng)該可以看到收藏品A look at your Products table(圖3)。
接下來(lái),創(chuàng)建一個(gè)新的集合。你想叫什么都行;我們會(huì)用這個(gè)令人興奮的名字默認(rèn)集合
,并保存到我們的分析收藏。
那我們就把A look at your Products table我們新創(chuàng)建的系列默認(rèn)集合
.
這是我們實(shí)際開(kāi)始使用Metabase的序列化功能的地方。
由于我們的Metabase源實(shí)例設(shè)置了一些問(wèn)題,現(xiàn)在是時(shí)候轉(zhuǎn)儲(chǔ)這些數(shù)據(jù)并將其加載到我們的Metabase目標(biāo)環(huán)境中了。這樣,我們就不必在目標(biāo)環(huán)境中手動(dòng)重新創(chuàng)建默認(rèn)集合。
首先在/tmp
公司
調(diào)用的目錄Metabase
數(shù)據(jù)
儲(chǔ)存垃圾:
cd /tmp
mkdir metabase_data
接下來(lái),我們將運(yùn)行dump命令。
docker run --rm --name metabase-dump \
--network metanet \
-e MB_DB_CONNECTION_URI="postgres://postgres:5432/metabase?user=metabase&password=knockknock" \
-v "/tmp/metabase_data:/target" \
metabase/metabase-enterprise:v1.44.6 "dump /target"
此命令創(chuàng)建一個(gè)名為metabase dump的臨時(shí)Metabase實(shí)例。此臨時(shí)Metabase實(shí)例將連接到Metabase源環(huán)境的Postgres應(yīng)用程序數(shù)據(jù)庫(kù),并導(dǎo)出環(huán)境的數(shù)據(jù)。
如果一切順利,幾秒鐘后您應(yīng)該會(huì)看到一些輸出,然后在您的終端中顯示一條消息“數(shù)據(jù)遷移完成”。
為了驗(yàn)證垃圾堆,cd
進(jìn)入您的目錄:/tmp/metabase_data。您應(yīng)該會(huì)看到兩個(gè)目錄和三個(gè)YAML文件:
清單文件包含有關(guān)環(huán)境的一些基本信息:
serialization-version: 1
metabase-version:
date: '2020-08-19'
tag: v1.36.4
branch: enterprise-release-1.36.x
hash: 0324e9c設(shè)置
設(shè)置文件包含許多可在設(shè)置新實(shí)例時(shí)配置的選項(xiàng)。以下是它的內(nèi)容:
enable-whitelabeling?: null
jwt-enabled: 'false'
ldap-host: null
jwt-attribute-email: null
engines: null
application-colors: '{}'
enable-embedding: 'false'
jwt-shared-secret: null
enable-xrays: 'true'
...數(shù)據(jù)庫(kù)
此目錄包含所有元數(shù)據(jù)已連接數(shù)據(jù)庫(kù)的設(shè)置。在本例中,我們只包含Metabase中的Sample數(shù)據(jù)庫(kù)。
集合在collections目錄中,我們將找到我們?cè)O(shè)置的數(shù)據(jù)。這是我們的Default_collection.yaml文件:
description: A default collection that features our default questions.
archived: false
slug: default_collection
color: '#509EE3'
name: Default collection
namespace: null
下面是一個(gè)題為Days when Products were added:
enable_embedding: false
visualization_settings:
graph.series_labels:
- number
graph.metrics:
- count
graph.dimensions:
- CREATED_AT
graph.colors:
- '#509EE3'
graph.x_axis.title_text: Created At by day of the month
dataset_query:
type: query
database: /databases/Sample Database
query:
source-table: /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS
breakout:
- - datetime-field
- - field-id
- /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS/fields/CREATED_AT
- day-of-month
aggregation:
- - count
name: Days when Products were added
archived: false
collection_position: null
database_id: /databases/Sample Database
embedding_params: null
table_id: /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS
...步驟5-Load到target?環(huán)境
您需要至少一個(gè)管理員帳戶(hù)加載到我們的Metabase目標(biāo),以便上載轉(zhuǎn)儲(chǔ)。您可以通過(guò)應(yīng)用程序登錄以創(chuàng)建該用戶(hù),或者使用我們上面使用的腳本:只需記住更改MB_PORT
到5002
,因?yàn)檫@是我們分配給Metabase目標(biāo)環(huán)境的端口。例如,cd
到您保存create_users.sh?目錄中的腳本,然后運(yùn)行:
MB_HOSTNAME=localhost MB_PORT=5002 ./create_users.sh
我們可以將所有這些設(shè)置上載到目標(biāo)環(huán)境中,但是假設(shè)我們只想加載默認(rèn)集合。
讓我們復(fù)制我們的/tmp/metabase_data目錄,以便我們可以保留原始內(nèi)容并對(duì)副本進(jìn)行更改。
cp -r /tmp/metabase_data /tmp/serialize_load
換上新的/tmp/serialize_load目錄。我們要做兩個(gè)改變:
databases
目錄。從內(nèi)部/tmp/serialize_load目錄,運(yùn)行rm -r databases.自動(dòng)生成的儀表板
集合,因?yàn)槲覀冎幌肷蟼?code>默認(rèn)集合:cd /tmp/serialize_load/collections/root/collections && rm -r Automatically\ Generated\ Dashboards/
要驗(yàn)證更改,可以運(yùn)行diff
要查看原始序列化的_001目錄與將用于加載到Metabase目標(biāo)環(huán)境中的序列化的加載目錄之間的更改,請(qǐng)執(zhí)行以下操作:
diff -r metabase_data serialize_load
您應(yīng)該看到以下內(nèi)容:
Only in metabase_data/collections/root/collections: Automatically Generated Dashboards
Only in metabase_data: databases
現(xiàn)在,我們/tmp/serialize_load目錄設(shè)置后,可以運(yùn)行l(wèi)oad命令將元數(shù)據(jù)加載到out目標(biāo)環(huán)境metabase-target中。
docker run --rm --name metabase-dump \
--network metanet \
-e MB_DB_CONNECTION_URI="postgres://postgres-target:5432/metabase?user=metabase&password=knockknock" \
-v "/tmp/serialize_load:/target" \
metabase/metabase-enterprise:v1.44.6 "load /target"步驟6-在目標(biāo)環(huán)境中驗(yàn)證儀表板和集合
現(xiàn)在,如果您登錄到目標(biāo)環(huán)境http://localhost:5002
,你應(yīng)該看看我們的默認(rèn)集合
準(zhǔn)備好了,包含我們的A look at your Products table收藏。
就這樣:您已經(jīng)預(yù)裝了一個(gè)Metabase的新實(shí)例,其中包含一個(gè)包含大量問(wèn)題的儀表板的集合!
序列化限制請(qǐng)注意,序列化轉(zhuǎn)儲(chǔ)不包含某些數(shù)據(jù):
使用序列化功能導(dǎo)出問(wèn)題和儀表板可以打開(kāi)一些很酷的可能性,包括:
請(qǐng)?jiān)囉靡幌滦蛄谢δ埽⒃谖覀兊脑谖覀兊恼搲细嬖V我們您是如何做到的。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧