Flink SQL查询语法部分详解(提供需求、数据练习复现)

一、Hints

动态表选择:可以在查询表的时候动态修改表的参数配置

1、读取kafka的数据建表
CREATE TABLE students (
  id STRING,
  name STRING,
  age INT,
  sex STRING,
  clazz STRING
) WITH (
  'connector' = 'kafka',
  'topic' = 'students', -- 指定topic
  'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092', -- 指定kafka集群列表
  'properties.group.id' = 'testGroup', -- 指定消费者组
  'scan.startup.mode' = 'earliest-offset', -- 指定读取数据的位置
  'format' = 'csv' -- 指定数据的格式
);

2、假设此时查数据不是查询最早开始的,而是读取任务启动之后生产的数据,如果将上面的表删除重建便显得多余,此时我们就可以使用Hints解决
-- latest-offset: 读取任务启动之后生产的数据
select * from students /*+ OPTIONS('scan.startup.mode' = 'latest-offset') */; 

二、WITH

WITH子句(也称为公用表表达式CTE)允许在SELECT语句中定义一个或多个临时命名的结果集,这些结果集可以在主查询中引用。当有一段sql逻辑重复时,可以定义在with语句中,减少代码量。

with tmp as (
    select id,name,age,clazz
    from students
)
select * from tmp where age=22
union all
select * from tmp where age>=22;

--UNION ALL
是一个集合操作符,用于合并两个或多个 SELECT 语句的结果集。
注意:
1、与 UNION 不同,UNION ALL 会保留所有行,包括重复的行。
2、在使用 UNION ALL 时,所有 SELECT 语句必须具有相同数量的列,并且这些列的数据类型也必须兼容。

 

三、SELECT DISTINCT

对于流处理的问题注意:
1、flink会将之前的数据保存在状态中,用于判断是否重复
2、如果表的数据量很大,随着时间的推移状态会越来越大,状态的数据时先保存在TM的内存中,时间长了可能会出问题


-- csv.ignore-parse-errors  解析 CSV 文件时是否忽略解析错误,就是遇到数据不匹配或者脏数据会跳过,而不是报错导致整个作业失败
-- distinct  给数据去重
select distinct * from students /*+ OPTIONS('csv.ignore-parse-errors' ='true','scan.startup.mode' = 'latest-offset') */;

# 创建kafka生产者输入重复数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic students
1500101000,符瑞渊,23,男,理科六班
1500101000,符瑞渊,23,男,理科六班
1500101000,符瑞渊,23,男,理科六班

结果只有一条数据:

四、窗口函数(TVFs)

1、滚动窗口函数(TUMBLE)

案例:事件时间为例

1、创建bid表
-- TIMESTAMP(3)    3表示小数秒的位数,即毫秒的精度。
CREATE TABLE bid (
    item  STRING,
    price  DECIMAL(10, 2),
    bidtime TIMESTAMP(3),
    WATERMARK FOR bidtime AS bidtime - INTERVAL '5' SECOND       ---- 指定时间字段和水位线生成策略
) WITH (
    'connector' = 'kafka',
    'topic' = 'bid',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);


2、查询
-- TUMBLE:滚动窗口函数,在原表的基础上增加窗口开始时间,窗口结束时间,窗口时间
select item,price,bidtime,window_start,window_end,window_time from table(
    TUMBLE(table bid,descriptor(bidtime),interval '10' seconds)
)


3、在kafka生产测试数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic bid
C,4.00,2020-04-15 08:05:01
A,2.00,2020-04-15 08:05:03
D,5.00,2020-04-15 08:05:05
B,3.00,2020-04-15 08:05:04
E,1.00,2020-04-15 08:05:11
F,6.00,2020-04-15 08:05:25

结果:

窗口聚合计算
实时统计最近10秒所有商品的平均价格

SELECT 
    window_start,
    window_end,
    avg(price) as avg_price
FROM 
    TABLE(
       TUMBLE(TABLE bid, DESCRIPTOR(bidtime), INTERVAL '10' SECONDS)
    )
group by 
    window_start,
    window_end;

结果: 

2、滑动窗口函数(HOP)

案例:以处理时间为例

1、建表
CREATE TABLE bid_proctime (
    item  STRING,
    price  DECIMAL(10, 2),
    proctime AS PROCTIME()    --proctime列是一个处理时间属性,系统会自动为每一行分配当前处理时间。
) WITH (
    'connector' = 'kafka',
    'topic' = 'bid_proctime',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);

2、查询 每隔五秒查询最近十秒的数据
-- HOP: 滑动窗口函数
SELECT item,price,proctime,window_start,window_end,window_time FROM TABLE(
    HOP(TABLE bid_proctime, DESCRIPTOR(proctime), INTERVAL '5' SECOND, INTERVAL '10' SECOND)
);

3、kafka生产数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic bid_proctime
C,4.00
A,2.00
D,5.00
B,3.00
E,1.00
F,6.00
K,6.00


4、窗口聚合查询
SELECT 
    window_start,
    window_end,
    avg(price) as avg_price
FROM 
    TABLE(
        HOP(TABLE bid_proctime, DESCRIPTOR(proctime), INTERVAL '5' SECOND, INTERVAL '10' SECOND)
    )
group by 
    window_start,
    window_end;

3、累计窗口(CUMULATE )

CREATE TABLE bid_cumulate (
    item  STRING,
    price  DECIMAL(10, 2),
    bidtime TIMESTAMP(3),
    WATERMARK FOR bidtime AS bidtime - INTERVAL '5' SECOND
) WITH (
    'connector' = 'kafka',
    'topic' = 'bid_cumulate',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);

2、每隔两分钟统计之前10分钟的数据
SELECT * FROM TABLE(
    CUMULATE(TABLE bid_cumulate, DESCRIPTOR(bidtime), INTERVAL '2' MINUTES, INTERVAL '10' MINUTES)
);

3、生产数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic bid_cumulate
C,4.00,2020-04-15 08:05:01
A,2.00,2020-04-15 08:07:01
D,5.00,2020-04-15 08:09:01
F,6.00,2020-04-15 08:27:01

结果:

 

 4、会话窗口(SESSION)

隔一段时间没有数据开始sql逻辑

1、建表
CREATE TABLE bid_proctime_session (
    item  STRING,
    price  DECIMAL(10, 2),
    proctime AS PROCTIME()
) WITH (
    'connector' = 'kafka',
    'topic' = 'bid_proctime_session',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);


2、实时统计每个商品的总的金额,隔5秒没有数据开始统计
select 
    item,
    SESSION_START(proctime,INTERVAL '5' SECOND)  as session_start,
    SESSION_END(proctime,INTERVAL '5' SECOND)  as session_end,
    sum(price) as sum_price
from 
    bid_proctime_session
group by
    item,
    SESSION(proctime,INTERVAL '5' SECOND);
    
   
3、生产数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic bid_proctime_session
C,4.00
C,2.00
C,5.00
C,3.00
C,1.00
C,6.00

结果: 

五、OVER聚合

OVER聚合针对一系列有序行计算每个输入行的聚合值。与GROUP BY聚合相反,OVER聚合不会将结果行数减少到每组一行。相反,OVER聚合会为每个输入行生成一个聚合值。类似于hive中的聚合开窗函数。

1、sum、max、min、avg、count

1、建表
CREATE TABLE `order` (
    order_id  STRING,
    amount  DECIMAL(10, 2),
    product STRING,
    order_time TIMESTAMP(3),
    WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND
) WITH (
    'connector' = 'kafka',
    'topic' = 'order',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'latest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);



2、查询
-- 实时统计每个商品的累计总金额,将总金额放在每一条数据的后面
-- 流处理的问题
-- a、sum over必须按照时间升序排序,因为数据时一条一条过来的,只能做累加求和,不能做全局求和
-- b、只能按照时间升序排序,如果按照其他的字段排序,每来一条数据都需要重新排序,计算代价太大,影响性能
select 
    order_id,
    amo unt,
    product,
    order_time,
    sum(amount) over(
        partition by product  
        order by order_time
    )
from 
    `order`
;


-- 2.1、实时统计每个商品的累计总金额,将总金额放在每一条数据的后面,只统计最近10分钟的数据
select 
    order_id,
    amount,
    product,
    order_time,
    sum(amount) over(
        partition by product  
        order by order_time
        -- 统计10分钟前到当前行的数据
        RANGE BETWEEN INTERVAL '10' MINUTES PRECEDING AND CURRENT ROW
    )
from 
    `order`
;

-- 2.2、实时统计每个商品的累计总金额,将总金额放在每一条数据的后面,计算最近5条数据
select 
    order_id,
    amount,
    product,
    order_time,
    sum(amount) over(
        partition by product  
        order by order_time
        -- 从前4条数据到当前行,为5条数据
        ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
    )
from 
    `order`
;


-- 2.3、实时统计每个商品的最大金额,将总金额放在每一条数据的后面,计算最近5条数据
select 
    order_id,
    amount,
    product,
    order_time,
    max(amount) over(
        partition by product  
        order by order_time
        -- 从前4条数据到当前行
        ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
    )
from 
    `order`
;



3、生产数据
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic order
1,4.00,001,2020-04-15 08:05:01
2,2.00,001,2020-04-15 08:07:01
3,5.00,001,2020-04-15 08:09:01
4,3.00,001,2020-04-15 08:11:01
5,1.00,001,2020-04-15 08:13:01
6,6.00,001,2020-04-15 08:17:01
6,6.00,001,2020-04-15 08:20:01
6,6.00,001,2020-04-15 08:21:01

2.0 结果:

2.1 结果:

2.2 结果:

2.3 结果:

 

2、row_number

用于为窗口中的每一行分配一个唯一的序号。这个序号是根据指定的排序顺序生成的

-- 查询1:如果只是增加排名,只能按照时间字段升序排序
select 
    order_id,
    amount,
    product,
    order_time,
    row_number() over(partition by product order by order_time) as r
from 
    `order`
;



查询2:
-- 实时统计每个商品金额最高的前两个商品  -- TOPN
-- 去完topn之后需要计算的排名的数据较少了(where r <= 2),计算代价降低了,因此可以partition by product,否则只能按照时间字段升序排序


select * 
from (
    select 
        order_id,
        amount,
        product,
        order_time,
        row_number() over(partition by product order by amount desc) as r
    from 
        `order`
)
where r <= 2

查询1结果:

查询2结果:

 

六、ORDER BY

-- 子流处理模式中,order by 需要按照时间字段升序排序
select * from 
`order`
order by 
order_time,amount

-- 加上limit ,计算代价就不高了,就可以按照普通字段进行排序了
select * from 
`order`
order by 
amount
limit 2;

七、模式检测(CEP)

搜索一组事件模式(event pattern)是一种常见的用例,尤其是在数据流情景中。Flink 提供复杂事件处理(CEP)库,该库允许在事件流中进行模式检测。

1、MATCH_RECOGNIZE 子句启用以下任务:

  • 使用 PARTITION BY 和 ORDER BY 子句对数据进行逻辑分区和排序。
  • 使用 PATTERN 子句定义要查找的行模式。这些模式使用类似于正则表达式的语法。
  • 在 DEFINE 子句中指定行模式变量的逻辑组合。
  • measures 是指在 MEASURES 子句中定义的表达式,这些表达式可用于 SQL 查询中的其他部分。

SQL 语义 #

2、每个 MATCH_RECOGNIZE 查询都包含以下子句:

  • PARTITION BY - 定义表的逻辑分区;类似于 GROUP BY 操作。
  • ORDER BY - 指定传入行的排序方式;这是必须的,因为模式依赖于顺序。
  • MEASURES - 定义子句的输出;类似于 SELECT 子句。
  • ONE ROW PER MATCH - 输出方式,定义每个匹配项应产生多少行。
  • AFTER MATCH SKIP - 指定下一个匹配的开始位置;这也是控制单个事件可以属于多少个不同匹配项的方法。
  • PATTERN - 允许使用类似于 正则表达式 的语法构造搜索的模式。
  • DEFINE - 本部分定义了模式变量必须满足的条件。

3、允许使用类似于 正则表达式 的语法构造搜索的模式(具体使用):

 

4、案例1

实现报警程序,对于一个账户,如果出现满足一定条件的的交易,就输出一个报警信息

CREATE TABLE tran (
    id  STRING,
    amount  DECIMAL(10, 2),
    proctime as PROCTIME()
) WITH (
    'connector' = 'kafka',
    'topic' = 'tran',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'latest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);


-- MATCH_RECOGNIZE(模式检测)
-- 在数据流上对数据进行匹配,当数满足我们定义的规则后,返回匹配的结果

-- 1、实现第一版报警程序,对于一个账户,如果出现小于 $1 美元的交易后紧跟着一个大于 $500 的交易,就输出一个报警信息。
SELECT *
FROM tran
    MATCH_RECOGNIZE (
      PARTITION BY id -- 分组字段
      ORDER BY proctime -- 排序字段,只能按照时间字段升序排序
      MEASURES -- 相当于select
        A.amount as min_amount,
        A.proctime as min_proctime,
        B.amount as max_amount,
        B.proctime as max_proctime
      PATTERN (A B) -- 定义规则
      DEFINE -- 定义条件
        A as amount < 1,
        B as amount > 500
    ) AS T
  
  -- 2、实现第二版报警程序,对于一个账户,如果出现小于 $1 美元的交易后紧跟着一个大于 $500 的交易,就输出一个报警信,两次事件需要在10秒内出现
  
SELECT *
FROM tran
    MATCH_RECOGNIZE (
      PARTITION BY id -- 分组字段
      ORDER BY proctime -- 排序字段,只能按照时间字段升序排序
      MEASURES -- 相当于select
        A.amount as min_amount,
        A.proctime as min_proctime,
        B.amount as max_amount,
        B.proctime as max_proctime
      PATTERN (A B)  WITHIN INTERVAL '5' SECOND -- 定义规则,增加事件约束,需要在5秒内匹配出结果
      DEFINE -- 定义条件
        A as amount < 1,
        B as amount > 500
    ) AS T;
    
    
  
 -- 3、实现第三版(最终版)报警程序,对于一个账户,如果连续出现三次出现小于 $1 美元的交易后紧跟着一个大于 $500 的交易,就输出一个报警信息
SELECT *
FROM tran
    MATCH_RECOGNIZE (
      PARTITION BY id -- 分组字段
      ORDER BY proctime -- 排序字段,只能按照时间字段升序排序
      MEASURES -- 相当于select
        A.amount as a_amount, -- 获取最后一条

        min(A.amount) as min_a_amount, -- 取最小的
        max(A.amount) as max_a_amount, -- 取最大的

        sum(A.amount) as sum_a_amount, -- 求和
        avg(A.amount) as avg_a_amount, -- 平均

        FIRST(A.amount) AS first_a_amount, -- 取前面第一条
        LAST(A.amount) AS LAST_a_amount, -- 取后面第一条

        B.amount as b_amount
      PATTERN (A{3} B) -- 定义规则
      DEFINE -- 定义条件
        A as amount < 1,
        B as amount > 500
    ) AS T;
    
    
    
第一第二版数据来源
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic tran
1,4.00
1,2.00
1,5.00
1,0.90
1,600.00
1,4.00
1,2.00
1,0.10
1,200.00
1,700.00
 
 
最终版数据来源
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic tran
1,0.90
1,0.10
1,0.20
1,600.00

5、案例2

找出一个单一股票价格不断下降的时期

CREATE TABLE ticker (
    symbol  STRING,
    rowtime  TIMESTAMP(3), -- 时间字段
    price  DECIMAL(10, 2) ,
    tax  DECIMAL(10, 2),
    -- 指定时间字段和水位线生成策略
    WATERMARK FOR rowtime AS rowtime
) WITH (
    'connector' = 'kafka',
    'topic' = 'ticker',
    'properties.bootstrap.servers' = 'master:9092,node1:9092,node2:9092',
    'properties.group.id' = 'testGroup',
    'scan.startup.mode' = 'latest-offset',
    'format' = 'csv',
    'csv.ignore-parse-errors' ='true' -- 当有脏数据时是否跳过当前行
);


-- 找出一个单一股票价格不断下降的时期
select * from 
ticker
MATCH_RECOGNIZE (
      PARTITION BY symbol -- 分组字段
      ORDER BY rowtime -- 排序字段,只能按照时间字段升序排序
      MEASURES -- 相当于select
        A.price as a_price,
        FIRST(B.price) as FIRST_b_price,
        LAST(B.price) as last_b_price,
    	C.price as c_price
      AFTER MATCH SKIP PAST LAST ROW -- 从当前匹配成功止呕的下一行开始匹配
      PATTERN (A B+ C) -- 定义规则
      DEFINE -- 定义条件
        -- 如果时第一个B,就和A比较,如果时后面的B,就和前一个B比较
        B as (LAST(B.price,1)is null and B.price < A.price) or B.price < LAST(B.price,1),
        C as C.price > LAST(B.price)
    ) AS T;
   
   
数据来源
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic ticker
ACME,2024-06-04 10:00:00,12,1
ACME,2024-06-04 10:00:01,17,2
ACME,2024-06-04 10:00:02,19,1
ACME,2024-06-04 10:00:03,21,3
ACME,2024-06-04 10:00:04,25,2
ACME,2024-06-04 10:00:05,18,1
ACME,2024-06-04 10:00:06,15,1
ACME,2024-06-04 10:00:07,14,2
ACME,2024-06-04 10:00:08,24,2
ACME,2024-06-04 10:00:09,25,2
ACME,2024-06-04 10:00:10,19,1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

root账号,cmd命令行能用ssh连上服务器,但是vscode连接报错Permission denied,please try again

☆ 问题描述 但是cmd能连接上 ★ 解决方案 点击 然后add到自己的配置文件下 重新选择 这个时候就会出现刚刚添加的&#xff0c;点击选择 输入密码 然后就ok了 ✅ 总结 只能说&#xff1a;玄学&#xff01;

美洽工作台3.0,全新发布!

美洽工作台3.0&#xff0c;全新发布 想要效率翻倍&#xff0c;就要一步到位&#xff01; 工作台 3.0&#xff0c;为效率而生 1. 更丰富的外观选择&#xff0c;让界面焕然一新&#xff0c;新增导航主题色选择&#xff0c;深色 Dark、浅色 Light 随意切换 2. 自定义你的专属导…

以真机算力剑指实用化!这家中国量子计算公司的应用探索

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙/王珩 排版丨沛贤 深度好文&#xff1a;1500字丨5分钟阅读 近些年来&#xff0c;由于底层物理的限制&#xff0c;经典集成电路通过缩小工艺制程提升算力的路线正在逼近极限&#xf…

RK3568技术笔记之一 RK3568总体介绍

RK3568是瑞芯微开发出一款很好用的芯片。我先把ROCKCHIP的原厂信息搬过来看看。 首先声明一下&#xff0c;这篇文章里的资讯版权归瑞芯微电子股份有限公司。毕竟是我转过来的嘛。 我自己的心得&#xff0c;版权就归我啦。 搬砖地址Rockchip-瑞芯微电子股份有限公司瑞芯微专注…

Django项目上线-报错汇总

Django项目上线-报错汇总 下列报错基本都是Python环境相关 pip install 报错 WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. debian运行pip报错ssl module in Python is not available - z417 - 博…

Javaweb基础之json

大家好&#xff0c;这里是教授.F 目录 引入&#xff1a; 定义格式&#xff1a; json规制&#xff1a; 字符串转json&#xff1a; json转字符串: 字符串和json转化细节&#xff1a; json在java中的使用: 应用实例&#xff1a; JavaBean和json字符串的转换&#xff1a; l…

解决ESP-IDF工程里面C/C++找不到路径标红的问题

解决ESP-IDF工程里面C/C找不到路径标红的问题 教程 源文件 打开这一个文件 {"configurations": [{"name": "ESP-IDF","cStandard": "c11","cppStandard": "c17","compileCommands": "…

论文AI率过高?掌握这四种技巧轻松降重

随着人工智能技术的突飞猛进&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已被广泛用于学术论文撰写中&#xff0c;提高效率同时也带来了原创性的挑战。面对日益严格的学术审查&#xff0c;一个突出的问题是&#xff1a;使用AI代写的论文能否通过内容检测&#xff1f;因…

【数据结构】图论中求最短路径——迪杰斯特拉算法(Dijkstra)、弗洛伊德算法(Floyd)

目录 最短路径 (*)迪杰斯特拉算法&#xff08;Dijkstra&#xff09;迪杰斯特拉算法&#xff08;Dijkstra&#xff09;的算法原理&#xff1a; 弗洛伊德算法&#xff08;Floyd&#xff09;弗洛伊德算法&#xff08;Floyd&#xff09;的算法原理&#xff1a;弗洛伊德算法的&#…

导弹研究中常用坐标系及坐标系之间的变换

在导弹飞行控制过程中&#xff0c;需要时刻掌握导弹的飞行状态 &#xff08;速度、位置、姿态角等&#xff09;&#xff0c;这就有赖于描述导弹飞行状态的坐标系。除了大地坐标系和地心大地直角坐标系外&#xff0c;导弹常用的坐标系还有很多&#xff0c;合理而恰当地选择参考系…

【LangChain系列】第二篇:文档拆分简介及实践

在上一篇博客中&#xff0c;我们学习了如何使用LangChain的文档加载器将文档加载为标准格式。加载文档后&#xff0c;下一步是将它们拆分为更小的块。这个过程乍一看似乎很简单&#xff0c;但有一些微妙之处和重要的考虑因素会显着影响下游任务的性能和准确性。 一、为什么文档…

qcom 平台系统签名流程

security boot 平台的东东&#xff0c;oem 可定制的功能有限&#xff0c;只能参考平台文档&#xff0c;可以在高通的网站上搜索&#xff1a;Secure Boot Enablement&#xff0c;然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…

【人工智能】第五部分:ChatGPT的实际应用案例和未来发展方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【成品设计】基于STM32的体温监控系统的设计与实现

《基于STM32的体温监控系统的设计与实现》 整体功能&#xff1a; 体温监控系统采用STM32F103VET6单片机为主控&#xff0c;在此基础上移植了一款国产嵌入式操作系统RT-thread进行开发设计的。 该系统的主要工作逻辑为&#xff1a;管理员可先将相关人员的指纹、ID等数据录入系…

AC/DC电源模块的效率如何?

BOSHIDA AC/DC电源模块的效率如何&#xff1f; AC/DC电源模块是一种将交流电转换为直流电的装置&#xff0c;常用于电子设备的电源部分。其效率是指输入电功率与输出电功率的比值&#xff0c;通常以百分比表示。AC/DC电源模块的效率主要取决于以下几个因素&#xff1a;开关频…

EE trade:如何在A股市场中有效设定止盈止损点

A股市场充满机遇和风险&#xff0c;很多投资者在这里实现了财富增长&#xff0c;也有投资者在这里遭受损失。如何在波动性较大的市场中&#xff0c;控制风险&#xff0c;保护利润和本金?止盈止损是关键。 什么是止盈止损? 止盈止损是指在交易中&#xff0c;根据预先设定的条…

酱菜产业:传承美味,点亮生活

酱菜&#xff0c;这道深受人们喜爱的传统美食&#xff0c;以其独特的风味和营养价值&#xff0c;点亮了我们的日常生活。酱菜产业作为美食文化的重要组成部分&#xff0c;正以其独特的魅力&#xff0c;吸引着越来越多的消费者。 酱菜产业的赵总说&#xff1a;酱菜的制作过程&am…

深入分析 Flink SQL 工作机制

摘要&#xff1a;本文整理自 Flink Forward 2020 全球在线会议中文精华版&#xff0c;由 Apache Flink PMC 伍翀&#xff08;云邪&#xff09;分享&#xff0c;社区志愿者陈婧敏&#xff08;清樾&#xff09;整理。旨在帮助大家更好地理解 Flink SQL 引擎的工作原理。文章主要分…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

java自学阶段二:JavaWeb开发45(git学习)

目录&#xff1a; 学习目标git的使用&#xff08;工作流程、常用命令、idea集成&#xff09; 一、学习目标&#xff1a; 了解Git基本概念能够了解git的工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 二、git的使用 1&#xff09;git的概念&#xff1…