当前位置: 首页 > article >正文

doris:导入时实现数据转换

Doris 在数据导入时提供了强大的数据转换能力,可以简化部分数据处理流程,减少对额外 ETL 工具的依赖。主要支持以下四种转换方式:

  • 列映射:将源数据列映射到目标表的不同列。

  • 列变换:使用函数和表达式对源数据进行实时转换。

  • 前置过滤:在列映射和列变换前过滤掉不需要的原始数据。

  • 后置过滤:在列映射和列变换后数据对最终结果进行过滤。

通过这些内置的数据转换功能,可以提高导入效率,并确保数据处理逻辑的一致性。

导入语法​

Stream Load​

通过在 HTTP header 中设置以下参数实现数据转换:

参数说明
columns指定列映射和列变换
where指定后置过滤

注意: Stream Load 不支持前置过滤。

示例:

curl --location-trusted -u user:passwd \-H "columns: k1, k2, tmp_k3, k3 = tmp_k3 + 1" \-H "where: k1 > 1" \-T data.csv \http://<fe_ip>:<fe_http_port>/api/example_db/example_table/_stream_load

Broker Load​

在 SQL 语句中通过以下子句实现数据转换:

子句说明
column list指定列映射,格式为 (k1, k2, tmp_k3)
SET指定列变换
PRECEDING FILTER指定前置过滤
WHERE指定后置过滤

示例:

LOAD LABEL test_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE `test_tbl`(k1, k2, tmp_k3)PRECEDING FILTER k1 = 1SET (k3 = tmp_k3 + 1)WHERE k1 > 1
)
WITH S3 (...);

Routine Load​

在 SQL 语句中通过以下子句实现数据转换:

子句说明
COLUMNS指定列映射和列变换
PRECEDING FILTER指定前置过滤
WHERE指定后置过滤

示例:

CREATE ROUTINE LOAD test_db.label1 ON test_tblCOLUMNS(k1, k2, tmp_k3, k3 = tmp_k3 + 1),PRECEDING FILTER k1 = 1,WHERE k1 > 1...

Insert Into​

Insert Into 可以直接在 SELECT 语句中完成数据转换,使用 WHERE 子句实现数据过滤。

列映射​

列映射用于定义源数据列与目标表列之间的对应关系,能够处理以下场景:

  • 源数据与目标表的列顺序不一致
  • 源数据与目标表的列数量不匹配

调整列顺序​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

目标表有 k1, k2, k3, k4 四列,要实现如下映射:

列1 -> k1
列2 -> k3
列3 -> k2
列4 -> k4

创建目标表​
CREATE TABLE example_table
(k1 INT,k2 STRING,k3 INT,k4 DOUBLE
) ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1,k3,k2,k4" \-T data.csv \-X PUT \http://<fe_ip>:<fe_http_port>/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label_broker
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k3, k2, k4)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k3, k2, k4),
COLUMNS TERMINATED BY ","
FROM KAFKA (...);

查询结果​
mysql> select * from example_table;
+------+-----------+------+------+
| k1   | k2        | k3   | k4   |
+------+-----------+------+------+
|    2 | shanghai  |  200 |  1.2 |
|    4 | chongqing | NULL |  1.4 |
|    3 | guangzhou |  300 |  1.3 |
|    1 | beijing   |  100 |  1.1 |
+------+-----------+------+------+

源文件列数量多于表列数​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

目标表有 k1, k2, k3 三列,而源文件包含四列数据。我们只需要源文件的第1、第2、第4列,映射关系如下:

列1 -> k1
列2 -> k2
列4 -> k3

要跳过源文件中的某些列,只需在列映射时使用任意不存在于目标表的列名。这些列名可以自定义,不受限制,导入时会自动忽略这些列的数据。

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 STRING,k3 DOUBLE
) ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u usr:passwd \-H "column_separator:," \-H "columns: k1,k2,tmp_skip,k3" \-T data.csv \http://<fe_ip>:<fe_http_port>/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label_broker
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(tmp_k1, tmp_k2, tmp_skip, tmp_k3)SET (k1 = tmp_k1,k2 = tmp_k2,k3 = tmp_k3)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, tmp_skip, k3),
PROPERTIES
("format" = "csv","column_separator" = ","
)
FROM KAFKA (...);

注意:示例中的 tmp_skip 可以替换为任意名称,只要这些名称不在目标表的列定义中即可。

查询结果​
mysql> select * from example_table;
+------+------+------+
| k1   | k2   | k3   |
+------+------+------+
|    1 | 100  |  1.1 |
|    2 | 200  |  1.2 |
|    3 | 300  |  1.3 |
|    4 | NULL |  1.4 |
+------+------+------+

源文件列数量少于表列数​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

目标表有 k1, k2, k3, k4, k5 五列,而源文件包含四列数据。我们只需要源文件的第1、第2、第3、第4列,映射关系如下:

列1 -> k1
列2 -> k3
列3 -> k2
列4 -> k4
k5 使用默认值

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 STRING,k3 INT,k4 DOUBLE,k5 INT DEFAULT 2
) ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1,k3,k2,k4" \-T data.csv \http://<fe_ip>:<fe_http_port>/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label_broker
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(tmp_k1, tmp_k3, tmp_k2, tmp_k4)SET (k1 = tmp_k1,k3 = tmp_k3,k2 = tmp_k2,k4 = tmp_k4)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k3, k2, k4),
COLUMNS TERMINATED BY ","
FROM KAFKA (...);

说明:

  • 如果 k5 列有默认值,将使用默认值填充
  • 如果 k5 列是可空列(nullable)但没有默认值,将填充 NULL 值
  • 如果 k5 列是非空列且没有默认值,导入会失败
查询结果​
mysql> select * from example_table;
+------+-----------+------+------+------+
| k1   | k2        | k3   | k4   | k5   |
+------+-----------+------+------+------+
|    1 | beijing   |  100 |  1.1 |    2 |
|    2 | shanghai  |  200 |  1.2 |    2 |
|    3 | guangzhou |  300 |  1.3 |    2 |
|    4 | chongqing | NULL |  1.4 |    2 |
+------+-----------+------+------+------+

列变换​

列变换功能允许用户对源文件中列值进行变换,支持使用绝大部分内置函数。列变换操作通常是和列映射一起定义的,即先对列进行映射,再进行变换。

将源文件中的列值经变换后导入表中​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列,导入映射和变换关系如下:

列1       -> k1
列2 * 100 -> k3
列3       -> k2
列4       -> k4

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 STRING,k3 INT,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, tmp_k3, k2, k4, k3 = tmp_k3 * 100" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, tmp_k3, k2, k4)SET (k3 = tmp_k3 * 100)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, tmp_k3, k2, k4, k3 = tmp_k3 * 100),
COLUMNS TERMINATED BY ","
FROM KAFKA (...);

查询结果​
mysql> select * from example_table;
+------+-----------+-------+------+
| k1   | k2        | k3    | k4   |
+------+-----------+-------+------+
|    1 | beijing   | 10000 |  1.1 |
|    2 | shanghai  | 20000 |  1.2 |
|    3 | guangzhou | 30000 |  1.3 |
|    4 | chongqing |  NULL |  1.4 |
+------+-----------+-------+------+

通过 case when 函数,有条件的进行列变换​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列。对于源数据中 beijing, shanghai, guangzhou, chongqing 分别转换为对应的地区 id 后导入:

列1                  -> k1
列2                  -> k2
列3 进行地区id转换后    -> k3
列4                  -> k4

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 INT,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, k2, tmp_k3, k4, k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k2, tmp_k3, k4)SET (k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, tmp_k3, k4, k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END),
COLUMNS TERMINATED BY ","
FROM KAFKA (...);

查询结果​
mysql> select * from example_table;
+------+------+------+------+
| k1   | k2   | k3   | k4   |
+------+------+------+------+
|    1 |  100 |    1 |  1.1 |
|    2 |  200 |    2 |  1.2 |
|    3 |  300 |    3 |  1.3 |
|    4 | NULL |    4 |  1.4 |
+------+------+------+------+

源文件中的 NULL 值处理​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列。在对地区 id 转换的同时,对于源数据中 k1 列的 null 值转换成 0 导入:

列1                      -> k1
列2 如果为null 则转换成0   -> k2
列3                      -> k3
列4                      -> k4

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 INT,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, tmp_k2, tmp_k3, k4, k2 = ifnull(tmp_k2, 0), k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, tmp_k2, tmp_k3, k4)SET (k2 = ifnull(tmp_k2, 0),k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END)
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, tmp_k2, tmp_k3, k4, k2 = ifnull(tmp_k2, 0), k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END),
COLUMNS TERMINATED BY ","
FROM KAFKA (...);

查询结果​
mysql> select * from example_table;
+------+------+------+------+
| k1   | k2   | k3   | k4   |
+------+------+------+------+
|    1 |  100 |    1 |  1.1 |
|    2 |  200 |    2 |  1.2 |
|    3 |  300 |    3 |  1.3 |
|    4 |    0 |    4 |  1.4 |
+------+------+------+------+

前置过滤​

前置过滤是在数据转换前对原始数据进行过滤的功能,可以提前过滤掉不需要处理的数据,减少后续处理的数据量,提高导入效率。该功能仅支持 Broker Load 和 Routine Load 两种导入方式。 前置过滤有以下应用场景:

  • 转换前做过滤

希望在列映射和转换前做过滤的场景,能够先行过滤掉部分不需要的数据。

  • 过滤列不存在于表中,仅作为过滤标识

比如源数据中存储了多张表的数据(或者多张表的数据写入了同一个 Kafka 消息队列)。数据中每行有一列表名来标识该行数据属于哪个表。用户可以通过前置过滤条件来筛选对应的表数据进行导入。

示例​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

前置过滤条件为:

列1>1,即只导入 列1>1 的数据,其他数据过滤掉。

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 STRING,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k2, k3, k4)PRECEDING FILTER k1 > 1
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, k3, k4),
COLUMNS TERMINATED BY ","
PRECEDING FILTER k1 > 1
FROM KAFKA (...)

查询结果​
mysql> select * from example_table;
+------+------+-----------+------+
| k1   | k2   | k3        | k4   |
+------+------+-----------+------+
|    2 |  200 | shanghai  |  1.2 |
|    3 |  300 | guangzhou |  1.3 |
|    4 | NULL | chongqing |  1.4 |
+------+------+-----------+------+

后置过滤​

后置过滤在数据转换后执行,可以根据转换后的结果进行过滤。

在列映射和转换缺省的情况下,直接过滤​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列,在缺省列映射和转换的情况下,只导入源文件中第 4 列为大于 1.2 的数据行。

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 STRING,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, k2, k3, k4" \-H "where: k4 > 1.2" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k2, k3, k4)where k4 > 1.2
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, k3, k4),
COLUMNS TERMINATED BY ","
WHERE k4 > 1.2;
FROM KAFKA (...)

查询结果​
mysql> select * from example_table;
+------+------+-----------+------+
| k1   | k2   | k3        | k4   |
+------+------+-----------+------+
|    3 |  300 | guangzhou |  1.3 |
|    4 | NULL | chongqing |  1.4 |
+------+------+-----------+------+

对经过列变换的数据进行过滤​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列。在列变换示例中,我们将省份名称转换成了 id。这里我们希望过滤掉 id 为 3 的数据

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 INT,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, k2, tmp_k3, k4, k3 = case tmp_k3 when 'beijing' then 1 when 'shanghai' then 2 when 'guangzhou' then 3 when 'chongqing' then 4 else null end" \-H "where: k3 != 3" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k2, tmp_k3, k4)SET (k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END)WHERE k3 != 3
)
WITH s3 (...); 

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, tmp_k3, k4),
COLUMNS TERMINATED BY ","
SET (k3 = CASE tmp_k3 WHEN 'beijing' THEN 1 WHEN 'shanghai' THEN 2 WHEN 'guangzhou' THEN 3 WHEN 'chongqing' THEN 4 ELSE NULL END
)
WHERE k3 != 3;
FROM KAFKA (...)

查询结果​
mysql> select * from example_table;
+------+------+------+------+
| k1   | k2   | k3   | k4   |
+------+------+------+------+
|    1 |  100 |    1 |  1.1 |
|    2 |  200 |    2 |  1.2 |
|    4 | NULL |    4 |  1.4 |
+------+------+------+------+

多条件过滤​

假设有以下源数据(表头列名仅为方便表述,实际并无表头):

列1,列2,列3,列4
1,100,beijing,1.1
2,200,shanghai,1.2
3,300,guangzhou,1.3
4,\N,chongqing,1.4

表中有 k1,k2,k3,k4 4 列。过滤掉 k1 列为 null 的数据,同时过滤掉 k4 列小于 1.2 的数据

创建示例表​
CREATE TABLE example_table
(k1 INT,k2 INT,k3 STRING,k4 DOUBLE
)
ENGINE = OLAP
DUPLICATE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1;

导入数据​
  • Stream Load
curl --location-trusted -u user:passwd \-H "column_separator:," \-H "columns: k1, k2, k3, k4" \-H "where: k1 is not null and k4 > 1.2" \-T data.csv \http://host:port/api/example_db/example_table/_stream_load

  • Broker Load
LOAD LABEL example_db.label1
(DATA INFILE("s3://bucket_name/data.csv")INTO TABLE example_tableCOLUMNS TERMINATED BY ","(k1, k2, k3, k4)where k1 is not null and k4 > 1.2
)
WITH s3 (...);

  • Routine Load
CREATE ROUTINE LOAD example_db.example_routine_load ON example_table
COLUMNS(k1, k2, k3, k4),
COLUMNS TERMINATED BY ","
WHERE k1 is not null and k4 > 1.2
FROM KAFKA (...);

查询结果​
mysql> select * from example_table;
+------+------+-----------+------+
| k1   | k2   | k3        | k4   |
+------+------+-----------+------+
|    3 |  300 | guangzhou |  1.3 |
|    4 | NULL | chongqing |  1.4 |
+------+------+-----------+------+

相关文章:

doris:导入时实现数据转换

Doris 在数据导入时提供了强大的数据转换能力&#xff0c;可以简化部分数据处理流程&#xff0c;减少对额外 ETL 工具的依赖。主要支持以下四种转换方式&#xff1a; 列映射&#xff1a;将源数据列映射到目标表的不同列。 列变换&#xff1a;使用函数和表达式对源数据进行实时…...

2021版小程序开发4——基础加强

2021版小程序开发4——基础加强 学习笔记 2025 自定义组件组件中behaviors的作用安装和使用vant-weapp组件库使用MobX实现全局数据共享对小程序的API进行Promise化 具体的内容还包括&#xff1a;使用npm包、全局数据共享、分包和自定义tabBar的案例&#xff1b; 1 自定义组件 …...

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群&#xff0c;请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…...

【AI非常道】二零二五年一月(二),AI非常道

经常在社区看到一些非常有启发或者有收获的话语&#xff0c;但是&#xff0c;往往看过就成为过眼云烟&#xff0c;有时再想去找又找不到。索性&#xff0c;今年开始&#xff0c;看到好的言语&#xff0c;就记录下来&#xff0c;一月一发布&#xff0c;亦供大家参考。 有关AI非…...

jQuery小游戏(二)

jQuery小游戏&#xff08;二&#xff09; 今天是新年的第二天&#xff0c;本人在这里祝大家&#xff0c;新年快乐&#xff0c;万事胜意&#x1f495; 紧接jQuery小游戏&#xff08;一&#xff09;的内容&#xff0c;我们开始继续往下咯&#x1f61c; 游戏中使用到的方法 key…...

【硬件测试】基于FPGA的QPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1QPSK 2.2 帧同步 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章 《基于FPGA的QPSK帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可…...

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司&#xff0c;恶补相关知识。 概念 一些概念&#xff1a; HPC&#xff1a;High Performance Computing&#xff0c;高性能计算SoC&#xff1a;System on Chip&#xff0c;单片系统FLOPS&#xff1a;Floating Point Operations Per Second&am…...

LINUX部署微服务项目步骤

项目简介技术栈 主体技术&#xff1a;SpringCloud&#xff0c;SpringBoot&#xff0c;VUE2&#xff0c; 中间件&#xff1a;RabbitMQ、Redis 创建用户 在linux服务器home下创建用户qshh&#xff0c;用于后续本项目需要的环境进行安装配置 #创建用户 useradd 用户名 #设置登录密…...

C++ list 容器用法

C list 容器用法 C 标准库提供了丰富的功能&#xff0c;其中 <list> 是一个非常重要的容器类&#xff0c;用于存储元素集合&#xff0c;支持双向迭代器。<list> 是 C 标准模板库&#xff08;STL&#xff09;中的一个序列容器&#xff0c;它允许在容器的任意位置快速…...

解密全同态加密中的自举(Bootstrapping)

摘要 自举&#xff08;Bootstrapping&#xff09;是全同态加密&#xff08;Fully Homomorphic Encryption, FHE&#xff09;中经常使用的术语。熟悉 FHE 的人都知道&#xff0c;自举是 FHE 方案中最复杂且计算密集的部分。然而&#xff0c;只有极少数非 FHE 专家真正理解自举操…...

C#方法(练习)

1.定义一个函数&#xff0c;输入三个值,找出三个数中的最小值 2.定义一个函数&#xff0c;输入三个值,找出三个数中的最大值 3.定义一个函数&#xff0c;输入三个值,找出三个数中的平均值 4.定义一个函数&#xff0c;计算一个数的 N 次方 Pow(2, 3)返回8 5.传入十一…...

显示当前绑定变量

来自v$sql中的信息 测试两个变量的情况&#xff08;实际可以看6个&#xff0c;可根据需要修改&#xff09; DROP TABLE T1 PURGE; CREATE TABLE T1 AS SELECT A.*,SYSDATE RIQI FROM DBA_USERS A ORDER BY 1;var mc char(3); var id number; exec :mc:SYS; exec :id:50;set li…...

随机森林例子

完整代码&#xff1a; # 导入必要的库 from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import numpy as np# 加载鸢尾花数…...

2025年1月个人工作生活总结

本文为 2025年1月工作生活总结。 研发编码 使用sqlite3命令行查询表数据 可以直接使用sqlite3查询数据表&#xff0c;不需进入命令行模式。示例如下&#xff1a; sqlite3 database_name.db "SELECT * FROM table_name;"linux shell使用read超时一例 先前有个编译…...

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu&#xff0c;资源管理器中输入&#xff1a; \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录&#xff1a; /usr/local/arm&#xff0c;命令如下&#xff1a; …...

vscode和pycharm的区别

VSCode&#xff08;Visual Studio Code&#xff09;和 PyCharm 是两款常用的 Python 开发工具&#xff0c;它们在功能和使用体验上有一些关键区别&#xff1a; 1. 核心定位 VSCode&#xff1a;轻量级、多语言支持的代码编辑器&#xff0c;依靠插件扩展 Python 开发能力。PyCh…...

宝塔面板SSL加密访问设置教程

参考:https://www.bt.cn/bbs/thread-117246-1-1.html 如何快速使用证书加密访问面板 因早期默认未开启https访问所以没有相关的风险提醒&#xff0c;现面板默认已开启https加密访问、提升安全性 由于采用的是服务器内部本身签发证书&#xff0c;不被公网浏览器信任请参考以下步…...

Baklib在知识管理创新中的价值体现与其他产品的优势比较分析

内容概要 在当前的数字化时代&#xff0c;知识管理成为企业成功的重要组成部分。有效的知识管理不仅有助于提升内部沟通效率&#xff0c;还能促进创新与决策的科学化。尤其是Baklib作为一种知识中台&#xff0c;具有独特的价值&#xff0c;它能够融合企业内外的知识资源&#…...

Python 数据分析 - 初识 Pandas

Python 数据分析 - 初识 Pandas 简介SeriesDataFrame创建基本操作添加删除 简介 Pandas 基于 NumPy 开发&#xff0c;它提供了快速、灵活、明确的数据结构&#xff0c;旨在简单、直观地处理数据。 Pandas 适用于处理以下类型的数据&#xff1a; 有序和无序的时间序列数据带行…...

力扣【416. 分割等和子集】详细Java题解(背包问题)

首先我们可以求出数组和&#xff0c;当我们找到一个子集中元素的和为数组和的一半时&#xff0c;该就说明可以分割等和子集。 对于该问题我们可以转换成背包问题&#xff0c;求 数组里的元素 装入 数组和的一半大小的背包 能取得的最大值。 然后注意可以剪枝的地方。 代码&…...

机器学习周报-文献阅读

文章目录 摘要Abstract 1 相关知识1.1 WDN建模1.2 掩码操作&#xff08;Masking Operation&#xff09; 2 论文内容2.1 WDN信息的数据处理2.2 使用所收集的数据构造模型2.2.1 Gated graph neural network2.2.2 Masking operation2.2.3 Training loss2.2.4 Evaluation metrics 2…...

【Linux】Linux C判断两个IPv6地址是否有包含关系

功能说明 要判断两个 IPv6 地址是否具有包含关系&#xff0c;包括前缀的比较&#xff0c;可以通过以下步骤实现&#xff1a; 解析 IPv6 地址和前缀&#xff1a;将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码&#xff1a;根据前缀长度生成掩码。按位比较&#…...

【Linux】列出所有连接的 WiFi 网络的密码

【Linux】列出所有连接的 WiFi 网络的密码 终端输入 sudo grep psk /etc/NetworkManager/system-connections/*会列出所有连接过 Wifi 的信息&#xff0c;格式类似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID&#xff0c;BBBBB 是对…...

C语言连接Mysql

目录 C语言连接Mysql下载 mysql 开发库 方法介绍mysql_init()mysql_real_connect()mysql_query()mysql_store_result()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_free_result()mysql_close() 完整代码 C语言连接Mysql 下载 mysql 开发库 方法一&#xf…...

Synology 群辉NAS安装(6)安装mssql

Synology 群辉NAS安装&#xff08;6&#xff09;安装mssql 写在前面mssql 2019:成功安装说明&#xff0c;这个最终成功了 mssql 2022没有成功1. pull image2.启动mssql docker container 远程连接 写在前面 mssq是一个重要节点。 这是因为我对mysql没有一丝好感。虽然接触了许…...

WEB集群1-5天

文章目录 第一天、1、初始化配置1. 编写的初始化的脚本 init_env.sh2. 远程拷贝初始化脚本到mysql服务器里3.在mysql这台服务器上执行脚本 2、总结 第二天1、yumyum介绍yum操作将冯老师提供的网站的源码包上传到web服务器 2、部署网站1、解压文件2、epel源&#xff1a;可以提供…...

“AI视频智能分析系统:让每一帧视频都充满智慧

嘿&#xff0c;大家好&#xff01;今天咱们来聊聊一个特别厉害的东西——AI视频智能分析系统。想象一下&#xff0c;如果你有一个超级聪明的“视频助手”&#xff0c;它不仅能自动识别视频中的各种元素&#xff0c;还能根据内容生成详细的分析报告&#xff0c;是不是感觉特别酷…...

oracle中使用in 和 not in 查询效率分析

在Oracle数据库中&#xff0c;IN和NOT IN的查询效率受多种因素影响&#xff0c;以下是关键点总结和优化建议&#xff1a; 1. IN 的效率 优化方式&#xff1a; IN 通常会被优化为 OR条件 或 半连接&#xff08;Semi-Join&#xff09;&#xff0c;如果子查询关联到外部表&#x…...

kaggle视频追踪NFL Health Safety - Helmet Assignment

3年前的比赛了&#xff0c;检测视频中的头盔&#xff0c;通过对比赛录像的分析&#xff0c;正确指派球员。每个进攻都有两个相关的视频&#xff0c;一个是边线视角&#xff0c;另一个是端区视角&#xff0c;而且这两个视频是同步的&#xff0c;即视频中的每一帧都是对应的。我用…...

idea对jar包内容进行反编译

1.先安装一下这个插件java Bytecode Decompiler 2.找到这个插件的路径&#xff0c;在idea的plugins下面的lib文件夹内&#xff1a;java-decompiler.jar。下面是我自己本地的插件路径&#xff0c;以作参考&#xff1a; D:\dev\utils\idea\IntelliJ IDEA 2020.1.3\plugins\java-d…...