Metabase学习教程:系统管理-4

news2024/11/10 15:40:08

序列化:在Metabase实例间迁移

如何使用Metabase的序列化功能将问题、仪表板、集合、设置等从一个Metabase实例复制到新的Metabase实例。

Metabase序列化

序列化仅在商业版上可用(仅在自托管计划上)。

许多客户在迁移到本地部署的商业版时,需要上载预定义的问题仪表板,以设置新的Metabase实例或新的数据库连接。本文将介绍如何:

  1. 创建一组默认的问题和仪表板。
  2. 导出那些仪表板。
  3. 将这些仪表板重新导入新实例。

具体来说,我们将使用dumploadMetabase中的命令序列化功能执行第2步和第3步,再加上一点手动管理导出的文件。

我们将使用Docker运行我们的Metabase环境,并使用开源PostgresSQL为了我们应用程序数据库。我们不建议使用默认值H2用于生产的数据库(H2Metabase一起提供,因为它是一个轻量级数据库,使用Metabase很容易让用户启动和运行)

计划

我们将创建一个Metabase实例(我们的原始环境),创建一个仪表板,并将该仪表板加载到一个新的Metabase实例(我们的目标环境)中。计划如下:

  1. 创建一个名为metanet的专用网络.
  2. 启动Metabase的两个实例:origin和target.
  3. 在原始环境中创建仪表板和集合.
  4. 从源环境转储数据.
  5. 将源转储加载到目标环境中.
  6. 验证仪表板和集合是否已加载到目标环境中.

先决条件

你需要Docker安装在您的计算机上。

步骤1-创建专用网络

要创建名为“metanet”的专用网络,请从您选择的终端运行以下命令:

docker network create metanet

您可以确认网络是用以下方式创建的:

docker network ls

网络将有一个本地作用域和一个网桥驱动程序。

2-启动Metabase的两个实例

启动两个称为origintarget(尽管你可以随意命名这些环境)。请注意,我们使用--rm -d在创建这些Docker容器时,当您停止它们并在后台运行时,它们都会被移除。请随意更改这些标志以修改该行为。

Origin环境

创建Postgres数据库:

docker run --rm -d --name postgres \

    -p 5433:5432 \

    -e POSTGRES_USER=metabase \

    -e POSTGRES_PASSWORD=knockknock \

    --network metanet \

    postgres:12

创建Metabase源实例,并将其连接到我们刚刚创建的Postgres数据库:

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

您可以检查容器的日志以查看容器的进度:

docker logs metabase-origin

一旦看到包含“Metabase初始化完成的行,就可以打开浏览器http://localhost:5001查看Metabase实例。

Target环境

设置目标环境与此类似。在我们的metanet网络上,我们将设置一个Postgres数据库作为我们的应用程序数据库,然后在另一个Docker容器中启动Metabase的另一个实例。

注意以下更改:

  • Postgres(5434)和Metabase服务器(5002)的端口
  • 实例名称:metabase-originmetabase-target

应用程序数据库:

docker run --rm -d --name postgres-target \

    -p 5434:5432 \

    -e POSTGRES_USER=metabase \

    -e POSTGRES_PASSWORD=knockknock \

    --network metanet postgres:12

Metabase实例:

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实例完成初始化后,现在应该有两个Metabase环境启动并运行:

  • metabase-origin http://localhost:5001
  • metabase-target位于http://localhost:5002

将用户添加到我们的metabase-origin环境

让我们向metabase-origin实例添加一个管理帐户和两个基本用户。

你可以手动将用户添加到Metabase环境(例如,在Metabase应用程序中),但下面是一个快速bash脚本,它创建一个管理用户(初始用户)和两个基本用户:

#!/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,并使其可执行(chmod +x create_users.sh),然后运行:

MB_HOSTNAME=localhost MB_PORT=5001 ./create_users.sh

当您的 metabase-origin实例启动,并且您的用户已创建,打开http://localhost:5001并以您创建的管理员用户身份登录。用户IDadmin@metabase.local密码是Metapass123.

您应该看到Metabase的一个新实例(图1)。

图1。Metabase的新实例。

登录后,激活许可证密钥.

步骤3-origin环境中创建仪表板和集合

我们需要一些应用程序数据来导出,所以让我们使用包括在Metabase中的示例数据库或者,让Metabase为我们创建一些仪表板!

如图2所示,在Try These X-Rays Based On Your Data部分,单击带有黄色闪电这说明A look at your Products tableMetabase将为您生成一组问题,您可以将这些问题保存为仪表板。

图2。Metabase包含的示例数据库中Products表的X射线。

单击保存此按钮Metabase将把仪表板及其问题保存在收集有头衔的A look at your Products table.

此集合将保存到名为自动生成的仪表板。您可以通过单击导航栏左上角的Metabase徽标返回主屏幕来找到此集合。从主页,在我们的分析部分,单击自动生成的仪表板第节。从那里你应该可以看到收藏品A look at your Products table(图3)。

图3.一个名为看看你的产品表.

接下来,创建一个新的集合。你想叫什么都行;我们会用这个令人兴奋的名字默认集合,并保存到我们的分析收藏。

图4。创建一个新的集合,名为默认集合.

那我们就把A look at your Products table我们新创建的系列默认集合.

步骤4-origin 环境Dump

这是我们实际开始使用Metabase的序列化功能的地方。

由于我们的Metabase源实例设置了一些问题,现在是时候转储这些数据并将其加载到我们的Metabase目标环境中了。这样,我们就不必在目标环境中手动重新创建默认集合。

首先在/tmp公司调用的目录Metabase数据储存垃圾:

cd /tmp

mkdir metabase_data

接下来,我们将运行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"

此命令创建一个名为metabase dump的临时Metabase实例。此临时Metabase实例将连接到Metabase源环境的Postgres应用程序数据库,并导出环境的数据。

如果一切顺利,几秒钟后您应该会看到一些输出,然后在您的终端中显示一条消息数据迁移完成

为了验证垃圾堆,cd进入您的目录:/tmp/metabase_data。您应该会看到两个目录和三个YAML文件:

  • collections/
  • databases/
  • dependencies.yaml
  • manifest.yaml
  • settings.yaml

显示

清单文件包含有关环境的一些基本信息:

serialization-version: 1

metabase-version:

  date: '2020-08-19'

  tag: v1.36.4

  branch: enterprise-release-1.36.x

  hash: 0324e9c

设置

设置文件包含许多可在设置新实例时配置的选项。以下是它的内容:

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'

...

数据库

此目录包含所有元数据已连接数据库的设置。在本例中,我们只包含Metabase中的Sample数据库。

集合

collections目录中,我们将找到我们设置的数据。这是我们的Default_collection.yaml文件:

description: A default collection that features our default questions.

archived: false

slug: default_collection

color: '#509EE3'

name: Default collection

namespace: null

下面是一个题为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-Loadtarget 环境

您需要至少一个管理员帐户加载到我们的Metabase目标,以便上载转储。您可以通过应用程序登录以创建该用户,或者使用我们上面使用的脚本:只需记住更改MB_PORT 5002,因为这是我们分配给Metabase目标环境的端口。例如,cd到您保存create_users.sh 目录中的脚本,然后运行:

MB_HOSTNAME=localhost MB_PORT=5002 ./create_users.sh

我们可以将所有这些设置上载到目标环境中,但是假设我们只想加载默认集合。

让我们复制我们的/tmp/metabase_data目录,以便我们可以保留原始内容并对副本进行更改。

cp -r /tmp/metabase_data /tmp/serialize_load

换上新的/tmp/serialize_load目录。我们要做两个改变:

  1. 因为每个Metabase实例都包含示例数据库,而且我们没有对元数据进行任何更改,所以让我们删除databases目录。从内部/tmp/serialize_load目录,运行rm -r databases.
  2. 另外,我们把自动生成的仪表板集合,因为我们只想上传默认集合:
cd /tmp/serialize_load/collections/root/collections && rm -r Automatically\ Generated\ Dashboards/

要验证更改,可以运行diff要查看原始序列化的_001目录与将用于加载到Metabase目标环境中的序列化的加载目录之间的更改,请执行以下操作:

diff -r metabase_data serialize_load

您应该看到以下内容:

Only in metabase_data/collections/root/collections: Automatically Generated Dashboards

Only in metabase_data: databases

现在,我们/tmp/serialize_load目录设置后,可以运行load命令将元数据加载到out目标环境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-在目标环境中验证仪表板和集合

现在,如果您登录到目标环境http://localhost:5002,你应该看看我们的默认集合准备好了,包含我们的A look at your Products table收藏。

就这样:您已经预装了一个Metabase的新实例,其中包含一个包含大量问题的仪表板的集合!

序列化限制

请注意,序列化转储不包含某些数据:

  • 权限设置
  • 用户帐户或设置
  • 保存的问题的预警
  • 个人收藏或者他们的内容

序列化的其他用例

使用序列化功能导出问题和仪表板可以打开一些很酷的可能性,包括:

  • 向问题和仪表板添加版本控制。您可以将下载的元数据签入存储库,并通过版本控制软件(如git)管理对该数据的更改。
  • Metabase设置登台环境。您可以在过渡环境中玩,直到对更改满意为止,然后导出元数据,并将其上载到生产环境。

请试用一下序列化功能,并在我们的在我们的论坛上告诉我们您是如何做到的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树OJ题详解

第一题:单值二叉树 力扣链接:力扣 单值二叉树就是每一个节点存放的数据都相同,那么如何判断一棵树为单值二叉树呢?我们就拿最简单的一棵树为例子,比如根节点为1它的左子树和右子树也为1的一棵树,我们只需要…

以太网 TCP协议(TCP报文交互后的状态机变化)

2.7.2 以太网 TCP协议(TCP报文交互后的状态机变化) 一、TCP状态机: 二、TCP状态机变化 1、TCP三次握手 客户端主动发起SYN置位TCP之后,状态变为SYN_SENT(请求发送状态)服务器默认处于LISTEN(监听状态)。收到SYN报文之后&#x…

VMwareWorkStation如何添加万兆网卡,万兆网卡添加教程

1.引言 不同于ESXi,在VMware WorkStation(后文简称VMware)中添加网卡后没有选择网卡速度等级的选项,例如百兆、千兆、万兆等。就算点开右下角的”高级“也不管用。不过按照VMware的默认设定,当新建虚拟机选择32位操作系…

【玩转STL】STL的简介和string类用法和接口讲解(源码解析)

接触编程时间长一点的朋友想必都多多少少听过vector、string、queue等容器,也大抵了解一些有关STL的概念,这一节,我们就一起来谈一谈STL的六大组件,再来一起深入理解string类。 这里写目录标题🍎、什么是STL&#xff0…

人工智能:语音合成技术介绍

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

PCL 点云采样

一、简介 点云采样一般有三种方式,上采样,下采样,平均采样 原理介绍 下采样: 一般是采样是通过构建一个三维体素的格栅,然后在每个体素内用体素的重心近似的作为这个体素的整体特征,也就是说用这一个体素…

python 拆分pdf(有可执行文件exe)

1.背景 被那些软件pdf拆分整气死了,今天用python写一份pdf拆分的代码。 2.代码:(计算机的可以去学习一下,自己改改) pdf_split.py from PyPDF2 import PdfFileReader, PdfFileWriter# PDF文件分割 def split_pdf():…

pytorch nn.utils.rnn.pack_padded_sequence 分析

pack_padded_sequence 在nlp模型的forward方法中,可能有以下调用令读者疑惑 packed_embedded nn.utils.rnn.pack_padded_sequence(embedded, text_lengths, batch_firstTrue, enforce_sortedFalse)为什么要使用pack_padded_sequence? 参考 Pytorch中…

TDengine3.0:解决高基数问题的时序数据库设计思路

小 T 导读: 数据集的高基数(High-Cardinality)问题一直困扰着诸多主流的时序数据库(Time Series Database,TSDB)产品。一些数据库管理系统,在基数较低时表现良好;但是随着基数的增加…

vue2.x与vue3.x中自定义指令详解

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏&#xff…

m基于GA遗传算法的分件供送螺杆参数优化matlab仿真,优化参数包括螺杆总尺寸-最大圈数等

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 首先介绍MATLAB部分的遗传算法的优化算法介绍: 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法…

AI 对话模型被网友玩坏了!这次还可以运行 Docker 容器...

最近一款新的聊天 AI 被网友们玩疯了。它可以直接生成代码、可以给你的代码 debug 以及提出优化...可以模仿莎士比亚风格写作...还可以解答各种各样的问题,而且显然不只 10 岁小孩子的智商,感觉它已经把互联网上所有的公开资料都吸收并消化了。这就是 Op…

mssql(1433端口)介绍

mssql介绍 Microsoft SQL Server是一个关系型数据库,微软开发的管理系统。作为数据库服务器,它是一种软件产品,其主要功能是存储和检索其他软件应用程序所请求的数据,这些应用程序可以运行在同一台计算机上,也可以运行…

Java连接数据库(JDBC非常重要)

目录 一.数据库连接 1.1之前如何操作数据库 1.2.实际开发中如何操作数据库? 二.JDBC(Java Database Connectinity)(重要) 2.1.JDBC的概念 2.2 JDBC核心思想 2.2.1 MySQL数据库驱动 2.2.2 JDBC API 2.3JDBC 环境搭建 2.4准备一张表 2.4.1 创建student表 2.4.…

[附源码]Python计算机毕业设计Django三星小区车辆登记系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Json简介与基本使用

前言 本文为Json简介与基本使用相关知识,下边具体将对什么是JSON,XML与JSON的区别,JSON的语法格式,JSON数据的转换(包括:Java对象转换为JSON格式、JSON格式转换为Java对象)等进行详尽介绍~ &am…

学习 MySQL:什么是分页

在本文中,我将解释在MySQL中,什么是分页以及我们如何实现它。当我们从 MySQL 数据库填充大型数据集时,读取同一页面上的所有记录并不容易。使用分页,我们可以将结果集划分为多个页面,这增加了结果集的可读性。在本文中…

协议-序列化-http-Cookie-Session-https

文章目录再谈协议什么是序列化,什么是反序列化?为什么要进行序列化和反序列化?怎么进行序列化和反序列化呢?网络计算器版本总结http协议httpurlencode&urldecode一. 格式认识二 代码实现一个http协议下的服务器安装telnet服务…

javaScript 进阶之路 --- 《加深理解回调函数》

前言: 回想当初第一次看到“回调函数”这个名词的时候,真的快把我难哭了。所有视频教程在讲到某个知识点的时候,大概都会说一句:“啊,这里怎么办呢?这里我们就需要用到一个回调函数...”。 等等&#xff0…

校园论坛(Java)—— 数据报表模块

校园论坛(Java)—— 数据报表模块 文章目录校园论坛(Java)—— 数据报表模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2.3、数据报表设计3.1 数据报表主界面的实现3.2 发表数Top5的普通帖子3.3 回帖数Top5的普通帖…