数仓架构“瘦身”,Hologres 5000CU时免费试用

news2024/11/25 5:50:54

Hologres基于创新的HSAP架构,可以将您原先数仓架构中的OLAP系统(Greenplum、Presto、Impala、ClickHouse)、KV数据库/Serving系统(HBase、Redis)统一在一个大数据计算引擎中,并提供快速的离线实时一体化分析能力。

  • Hologres 5000CU时,20GB存储免费试用,前往试用>>

产品核心优势:

1、简化数仓架构,减少数据搬运与多处维护成本

2、实时查询性能强,刷新TPC-H 30000GB世界纪录

3、融合湖仓查询,0 ETL导入离线MaxCompute数据

Hologres使用教程简介

基于MaxCompute中TPC-H数据集数据和GitHub公开事件数据,在阿里云实时数仓Hologres上创建Hologres的数据库、外部表、内部表、导入数据至内部表中以及使用Hologres分别查询内部表和外部表中数据的指引。Hologres在查询数据方面具有极速响应的优势。

准备环境和资源

开始教程前,请按以下步骤准备环境和资源:

  1. 已创建专有网络(VPC)和专有网络交换机,详情请参见创建专有网络和交换机。
  2. 访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
  3. 成功登录后,在产品类别下选择大数据计算 > 数据计算与分析,在实时数仓Hologres卡片上,单击立即试用
  4. 在弹出的试用实时数仓Hologres产品的面板上完成参数信息配置。本试用教程以表格中的参数信息为例,未提及参数保持默认值。

参数

示例值

地域

华东1(杭州)

实例类型

通用型

计算资源

8核32GB(计算节点数量:1)

专有网络

选择步骤1中创建的VPC。

专有网络交换机

选择步骤1中创建的交换机。

实例名称

hologres_test

资源组

默认资源组

  1. 勾选服务协议后,单击立即试用,并根据页面提示完成试用申请。
    单击前往控制台,开启试用体验。

创建数据库

通过Hologres快速创建数据库,用于后续存放示例数据进行查询使用。

  1. 登录Hologres管理控制台,单击左侧实例列表
  2. 实例列表页面,单击对应实例名称。
  3. 实例详情页左侧导航栏,单击数据库管理
  4. DB授权页面,单击右上角新增数据库
  5. 新增数据库对话框,配置如下参数。

参数

说明

实例名

选择在哪个Hologres实例上创建数据库。默认展示当前已登录实例的名称,您也可以在下拉框中选择其他Hologres实例。

数据库名称

本示例数据库名称设置为holo_tutorial

简单权限策略

您可以为创建的数据库选择一种权限策略。更多关于权限策略的说明,请参见:

  • SPM:简单权限模型,该权限模型授权是以DB为粒度,划分admin(管理员)、developer(开发者)、writer(读写者)以及viewer(分析师)四种角色,您可以通过少量的权限管理函数,即可对DB中的对象进行方便且安全的权限管理。
  • SLPM:基于Schema级别的简单权限模型,该权限模型以Schema为粒度,划分 <db>.admin(DB管理员)、<db>.<schema>.developer(开发者)、<db>.<schema>.writer(读写者)以及 <db>.<schema>.viewer(分析师),相比于简单权限模型更为细粒度。
  • 专家:Hologres兼容PostgreSQL,使用与Postgres完全一致的权限系统。
  1. 单击确认

创建表

数据库创建成功后,您需在数据库中创建对应的表。

  1. 登录数据库。
    1. DB授权页面的顶部菜单栏,单击元数据管理
    2. 元数据管理页面,双击左侧目录树中已创建成功的数据库名称,单击确认
  1. 新建外部表。
    1. SQL编辑器页面,单击左上角的SQL图标。
    2. 新增使用TPC-H数据集数据的外部表,TPC-H数据引用自TPC,更多信息请参见TPC。
      在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
      示例SQL语句用来创建一个映射到MaxCompute公共空间MAXCOMPUTE_PUBLIC_DATA中odps_customer_10g、odps_lineitem_10g等表的外部表,用于后续查询。
DROP FOREIGN TABLE IF EXISTS odps_customer_10g;
DROP FOREIGN TABLE IF EXISTS odps_lineitem_10g;
DROP FOREIGN TABLE IF EXISTS odps_nation_10g;
DROP FOREIGN TABLE IF EXISTS odps_orders_10g;
DROP FOREIGN TABLE IF EXISTS odps_part_10g;
DROP FOREIGN TABLE IF EXISTS odps_partsupp_10g;
DROP FOREIGN TABLE IF EXISTS odps_region_10g;
DROP FOREIGN TABLE IF EXISTS odps_supplier_10g;
IMPORT FOREIGN SCHEMA "MAXCOMPUTE_PUBLIC_DATA#default" LIMIT to
(
    odps_customer_10g,
    odps_lineitem_10g,
    odps_nation_10g,
    odps_orders_10g,
    odps_part_10g,
    odps_partsupp_10g,
    odps_region_10g,
    odps_supplier_10g
) 
FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
    1. 新增使用GitHub公开事件数据的外部表,数据引用自GitHub,更多信息请参见基于GitHub公开事件数据集的离线实时一体化实践。
      单击左上角的SQL图标,在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
      示例SQL语句用来创建一个映射到MaxCompute公共空间MAXCOMPUTE_PUBLIC_DATA中github_eventsSchema下名为dwd_github_events_odps的外部表,用于后续查询。
DROP FOREIGN TABLE IF EXISTS dwd_github_events_odps;
IMPORT FOREIGN SCHEMA "MAXCOMPUTE_PUBLIC_DATA#github_events" LIMIT to
(
    dwd_github_events_odps
) 
FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
  1. 新建内部表。
    1. SQL编辑器页面,单击左上角角SQL图标。
    2. 新建使用TPC-H数据集数据的内部表。
      在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入如下语句,单击运行
      示例SQL语句用来创建名称分别为LINEITEM、ORDERS、PARTSUPP、PART、CUSTOMER、SUPPLIER、NATION和REGION的表,用于后续存储数据。
DROP TABLE IF EXISTS LINEITEM;
BEGIN;
CREATE TABLE LINEITEM
(
    L_ORDERKEY      BIGINT      NOT NULL,
    L_PARTKEY       INT         NOT NULL,
    L_SUPPKEY       INT         NOT NULL,
    L_LINENUMBER    INT         NOT NULL,
    L_QUANTITY      DECIMAL(15,2) NOT NULL,
    L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
    L_DISCOUNT      DECIMAL(15,2) NOT NULL,
    L_TAX           DECIMAL(15,2) NOT NULL,
    L_RETURNFLAG    TEXT        NOT NULL,
    L_LINESTATUS    TEXT        NOT NULL,
    L_SHIPDATE      TIMESTAMPTZ NOT NULL,
    L_COMMITDATE    TIMESTAMPTZ NOT NULL,
    L_RECEIPTDATE   TIMESTAMPTZ NOT NULL,
    L_SHIPINSTRUCT  TEXT        NOT NULL,
    L_SHIPMODE      TEXT        NOT NULL,
    L_COMMENT       TEXT        NOT NULL,
    PRIMARY KEY (L_ORDERKEY,L_LINENUMBER)
);
CALL set_table_property('LINEITEM', 'clustering_key', 'L_SHIPDATE,L_ORDERKEY');
CALL set_table_property('LINEITEM', 'segment_key', 'L_SHIPDATE');
CALL set_table_property('LINEITEM', 'distribution_key', 'L_ORDERKEY');
CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_ORDERKEY,L_PARTKEY,L_SUPPKEY,L_LINENUMBER,L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
CALL set_table_property('LINEITEM', 'dictionary_encoding_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
CALL set_table_property('LINEITEM', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS ORDERS;
BEGIN;
CREATE TABLE ORDERS
(
    O_ORDERKEY      BIGINT      NOT NULL PRIMARY KEY,
    O_CUSTKEY       INT         NOT NULL,
    O_ORDERSTATUS   TEXT        NOT NULL,
    O_TOTALPRICE    DECIMAL(15,2) NOT NULL,
    O_ORDERDATE     timestamptz NOT NULL,
    O_ORDERPRIORITY TEXT        NOT NULL,
    O_CLERK         TEXT        NOT NULL,
    O_SHIPPRIORITY  INT         NOT NULL,
    O_COMMENT       TEXT        NOT NULL
);
CALL set_table_property('ORDERS', 'segment_key', 'O_ORDERDATE');
CALL set_table_property('ORDERS', 'distribution_key', 'O_ORDERKEY');
CALL set_table_property('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT');
CALL set_table_property('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT');
CALL set_table_property('ORDERS', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS PARTSUPP;
BEGIN;
CREATE TABLE PARTSUPP
(
    PS_PARTKEY    INT    NOT NULL,
    PS_SUPPKEY    INT    NOT NULL,
    PS_AVAILQTY   INT    NOT NULL,
    PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
    PS_COMMENT    TEXT   NOT NULL,
    PRIMARY KEY(PS_PARTKEY,PS_SUPPKEY)
);
CALL set_table_property('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
CALL set_table_property('PARTSUPP', 'colocate_with', 'LINEITEM');
CALL set_table_property('PARTSUPP', 'bitmap_columns', 'PS_PARTKEY,PS_SUPPKEY,PS_AVAILQTY,PS_COMMENT');
CALL set_table_property('PARTSUPP', 'dictionary_encoding_columns', 'PS_COMMENT');
CALL set_table_property('PARTSUPP', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS PART;
BEGIN;
CREATE TABLE PART
(
    P_PARTKEY     INT    NOT NULL PRIMARY KEY,
    P_NAME        TEXT   NOT NULL,
    P_MFGR        TEXT   NOT NULL,
    P_BRAND       TEXT   NOT NULL,
    P_TYPE        TEXT   NOT NULL,
    P_SIZE        INT    NOT NULL,
    P_CONTAINER   TEXT   NOT NULL,
    P_RETAILPRICE DECIMAL(15,2) NOT NULL,
    P_COMMENT     TEXT   NOT NULL
);
CALL set_table_property('PART', 'distribution_key', 'P_PARTKEY');
CALL set_table_property('PART', 'bitmap_columns', 'P_PARTKEY,P_SIZE,P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
CALL set_table_property('PART', 'dictionary_encoding_columns', 'P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
CALL set_table_property('PART', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS CUSTOMER;
BEGIN;
CREATE TABLE CUSTOMER
(
    C_CUSTKEY    INT    NOT NULL PRIMARY KEY,
    C_NAME       TEXT   NOT NULL,
    C_ADDRESS    TEXT   NOT NULL,
    C_NATIONKEY  INT    NOT NULL,
    C_PHONE      TEXT   NOT NULL,
    C_ACCTBAL    DECIMAL(15,2) NOT NULL,
    C_MKTSEGMENT TEXT   NOT NULL,
    C_COMMENT    TEXT   NOT NULL
);
CALL set_table_property('CUSTOMER', 'distribution_key', 'C_CUSTKEY');
CALL set_table_property('CUSTOMER', 'bitmap_columns', 'C_CUSTKEY,C_NATIONKEY,C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
CALL set_table_property('CUSTOMER', 'dictionary_encoding_columns', 'C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
CALL set_table_property('CUSTOMER', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS SUPPLIER;
BEGIN;
CREATE TABLE SUPPLIER
(
    S_SUPPKEY   INT    NOT NULL PRIMARY KEY,
    S_NAME      TEXT   NOT NULL,
    S_ADDRESS   TEXT   NOT NULL,
    S_NATIONKEY INT    NOT NULL,
    S_PHONE     TEXT   NOT NULL,
    S_ACCTBAL   DECIMAL(15,2) NOT NULL,
    S_COMMENT   TEXT   NOT NULL
);
CALL set_table_property('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
CALL set_table_property('SUPPLIER', 'bitmap_columns', 'S_SUPPKEY,S_NAME,S_ADDRESS,S_NATIONKEY,S_PHONE,S_COMMENT');
CALL set_table_property('SUPPLIER', 'dictionary_encoding_columns', 'S_NAME,S_ADDRESS,S_PHONE,S_COMMENT');
CALL set_table_property('SUPPLIER', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS NATION;
BEGIN;
CREATE TABLE NATION(
  N_NATIONKEY INT NOT NULL PRIMARY KEY,
  N_NAME text NOT NULL,
  N_REGIONKEY INT NOT NULL,
  N_COMMENT text NOT NULL
);
CALL set_table_property('NATION', 'distribution_key', 'N_NATIONKEY');
CALL set_table_property('NATION', 'bitmap_columns', 'N_NATIONKEY,N_NAME,N_REGIONKEY,N_COMMENT');
CALL set_table_property('NATION', 'dictionary_encoding_columns', 'N_NAME,N_COMMENT');
CALL set_table_property('NATION', 'time_to_live_in_seconds', '31536000');
COMMIT;
DROP TABLE IF EXISTS REGION;
BEGIN;
CREATE TABLE REGION
(
    R_REGIONKEY INT  NOT NULL PRIMARY KEY,
    R_NAME      TEXT NOT NULL,
    R_COMMENT   TEXT
);
CALL set_table_property('REGION', 'distribution_key', 'R_REGIONKEY');
CALL set_table_property('REGION', 'bitmap_columns', 'R_REGIONKEY,R_NAME,R_COMMENT');
CALL set_table_property('REGION', 'dictionary_encoding_columns', 'R_NAME,R_COMMENT');
CALL set_table_property('REGION', 'time_to_live_in_seconds', '31536000');
COMMIT;
    1. 新增使用GitHub公开事件数据的内部表。
      单击左上角的SQL图标,在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
      示例SQL语句用来创建名称为gh_event_data的内部表,并设置distribution_key、event_time_column、clustering_key的表属性,用于后续数据导入和高性能查询。
DROP TABLE IF EXISTS gh_event_data;
BEGIN;
CREATE TABLE gh_event_data (
    id bigint,
    actor_id bigint,
    actor_login text,
    repo_id bigint,
    repo_name text,
    org_id bigint,
    org_login text,
    type text,
    created_at timestamp with time zone NOT NULL,
    action text,
    iss_or_pr_id bigint,
    number bigint,
    comment_id bigint,
    commit_id text,
    member_id bigint,
    rev_or_push_or_rel_id bigint,
    ref text,
    ref_type text,
    state text,
    author_association text,
    language text,
    merged boolean,
    merged_at timestamp with time zone,
    additions bigint,
    deletions bigint,
    changed_files bigint,
    push_size bigint,
    push_distinct_size bigint,
    hr text,
    month text,
    year text,
    ds text
);
CALL set_table_property('public.gh_event_data', 'distribution_key', 'id');
CALL set_table_property('public.gh_event_data', 'event_time_column', 'created_at');
CALL set_table_property('public.gh_event_data', 'clustering_key', 'created_at');
COMMIT;

导入示例数据

内部表创建成功后,可以通过以下步骤将数据导入Hologres内部表中。外部表在Hologres中不存储数据,只进行字段映射。通过外部表您可以使用Hologres直接调用存储于MaxCompute公共空间MAXCOMPUTE_PUBLIC_DATA的数据。

  1. SQL编辑器页面,单击左上角的SQL图标。
  2. 导入TPC-H数据集数据。
    在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
    示例SQL语句将MaxCompute公共空间MAXCOMPUTE_PUBLIC_DATA中public.odps_customer_10g、public.odps_lineitem_10g等表中数据导入到对应名称的内部表中,用于后续查询。
INSERT INTO public.customer SELECT * FROM public.odps_customer_10g ;
INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_10g ;
INSERT INTO public.nation SELECT * FROM public.odps_nation_10g ;
INSERT INTO public.orders SELECT * FROM public.odps_orders_10g ;
INSERT INTO public.part SELECT * FROM public.odps_part_10g ;
INSERT INTO public.partsupp SELECT * FROM public.odps_partsupp_10g ;
INSERT INTO public.region SELECT * FROM public.odps_region_10g ;
INSERT INTO public.supplier SELECT * FROM public.odps_supplier_10g ;
vacuum nation;
vacuum region;
vacuum supplier;
vacuum customer;
vacuum part;
vacuum partsupp;
vacuum orders;
vacuum lineitem;
analyze nation;
analyze region;
analyze lineitem;
analyze orders;
analyze customer;
analyze part;
analyze partsupp;
analyze supplier;
analyze lineitem (l_orderkey,l_partkey,l_suppkey);
analyze orders (o_custkey);
analyze partsupp(ps_partkey,ps_suppkey);
  1. 导入GitHub公开事件数据。
    单击左上角的SQL图标,在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
    示例SQL语句将MaxCompute公共空间MAXCOMPUTE_PUBLIC_DATA中的表dwd_github_events_odps中前一日的数据导入到内部表中,用于后续查询。由于本次活动中Hologres的资源有限,建议您导入并查询少于15天的数据。
INSERT INTO gh_event_data
SELECT
    *
FROM
    dwd_github_events_odps
WHERE
    ds >= (CURRENT_DATE - interval '1 day')::text;
analyze gh_event_data;

查询表中数据

  1. SQL编辑器页面,单击左上角的SQL图标。
  2. 基于TPC-H数据集数据查询。
    在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行
    下述SQL代码均为查询内部表数据使用,如需查询外部表,请将对应代码查询的表名更换为外部表名。
    基于TPC-H演化的22条查询语句请参见查询表中数据。
select
        l_returnflag,
        l_linestatus,
        sum(l_quantity) as sum_qty,
        sum(l_extendedprice) as sum_base_price,
        sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
        sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
        avg(l_quantity) as avg_qty,
        avg(l_extendedprice) as avg_price,
        avg(l_discount) as avg_disc,
        count(*) as count_order
from
        lineitem
where
        l_shipdate <= date '1998-12-01' - interval '120' day
group by
        l_returnflag,
        l_linestatus
order by
        l_returnflag,
        l_linestatus;
  1. 基于GitHub公开事件数据查询。单击左上角的SQL图标,在新增的临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入示例代码,单击运行。本文给出一些简单的数据分析语句,您可以基于表中字段,自行设计其他分析语句并查询。下述SQL代码均为查询内部表数据使用,如需查询外部表,请将对应代码查询的表名更换为外部表名。
    • 查询昨日最活跃项目。
SELECT
    repo_name,
    COUNT(*) AS events
FROM
    gh_event_data
WHERE
    created_at >= CURRENT_DATE - interval '1 day'
GROUP BY
    repo_name
ORDER BY
    events DESC
LIMIT 5;
    • 查询昨日最活跃开发者。
SELECT
    actor_login,
    COUNT(*) AS events
FROM
    gh_event_data
WHERE
    created_at >= CURRENT_DATE - interval '1 day'
    AND actor_login NOT LIKE '%[bot]'
GROUP BY
    actor_login
ORDER BY
    events DESC
LIMIT 5;
    • 查询昨日编程语言排行。
SELECT
    language,
    count(*) total
FROM
    gh_event_data
WHERE
    created_at > CURRENT_DATE - interval '1 day'
    AND language IS NOT NULL
GROUP BY
    language
ORDER BY
    total DESC
LIMIT 10;
    • 查询昨日项目新增星标数排行(不考虑取消星标的场景)。
SELECT
    repo_id,
    repo_name,
    COUNT(actor_login) total
FROM
    gh_event_data
WHERE
    type = 'WatchEvent'
    AND created_at > CURRENT_DATE - interval '1 day'
GROUP BY
    repo_id,
    repo_name
ORDER BY
    total DESC
LIMIT 10;

完成

完成以上操作后,您已经成功完成了Hologres数据查询操作。查询命令执行成功后,在临时Query查询页面下弹出结果页签,显示如下查询数据结果。

  • 基于TPC-H数据集数据查询结果示例:

  • 基于GitHub公开事件数据查询结果示例:
    • 昨日最活跃项目:

    • 昨日最活跃开发者:

    • 昨日编程语言排行:

    • 昨日项目新增星标数排行:
  • Hologres 5000CU时,20GB存储免费试用,前往试用>>
  • 了解Hologreshttps://www.aliyun.com/product/bigdata/hologram​​​​​

    欢迎关注Hologres开发者社区

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

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

相关文章

企业如何搭建公司的宿舍管理系统?让数字化改变新的管理方式

什么是企业宿舍管理系统 企业宿舍管理系统是一种用于管理企业宿舍的软件。它可以帮助企业更好地管理公司的宿舍&#xff0c;包括员工选房、入住登记、租金管理、公共设施预订等。该系统通常使用计算机和互联网技术&#xff0c;以便更高效地处理和记录与宿舍相关的活动和任务。…

【Nginx】Ubuntu23.04 安装Nginx

Ubuntu23.04 安装Nginx 1.官方文档2.命令补充 1.官方文档 ❤️ 根据Nginx官方文档在Ubuntu23.04版本上安装Nginx&#xff0c;直接跟随步骤复制命令即可。 → Nginx官方Ubunt安装文档 如图&#xff1a; 这里复制了一份&#xff0c;并翻译了&#xff1a; 安装必备组件&#xff1…

【剑指offer专项突破版】哈希表篇——“C“

文章目录 前言一、插入、删除和随机访问都是 O(1) 的容器题目分析思路分析代码 二、最近最少使用缓存题目分析思路分析代码 三、有效的变位词题目分析代码 四、变位词组题目分析思路分析代码 五、外星语言是否排序题目分析思路分析代码 六、最小时间差题目分析思路分析代码①—…

与行业协会共同探索创新前景:B端企业如何拓展品牌与业务增长

B端营销中行业协会是一个非常重要的渠道和抓手&#xff0c;因为这基本上是由企业产品的目标客户组成&#xff0c;但如何利用好行业协会&#xff0c;并低成本的拓展业务需要结合自身业务特点进行规划设计。 Oliver Du 一、行业协会的运作机制与权利结构 行业协会是由行业内的企…

【二等奖方案】系统访问风险识别「LOL四缺一」团队解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束。大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;将陆续释出各赛题获奖队伍的方案思路。本方案为【系统访问风险识别】赛题的二等奖获奖方案&#xff0c;赛题地址&#xff1a;…

从原理到实践,分析 Redis 分布式锁的多种实现方案(一)

一、为什么要用分布式锁 在分布式系统中&#xff0c;为了保证多个进程或线程之间的数据一致性和正确性&#xff0c;需要使用锁来实现互斥访问共享资源。然而&#xff0c;使用本地锁在分布式系统中存在问题。 本地锁的问题 无法保证全局唯一性&#xff1a;本地锁只在本地生效&…

2023年打印机电商市场数据分析

近年来&#xff0c;伴随自动化办公及在线教育等场景的常态化&#xff0c;文件或学习资料等的打印需求不断增长&#xff0c;这也使得打印机需求暴增&#xff0c;打印机市场的市场规模也越来越大。 根据鲸参谋电商平台的相关数据显示&#xff0c;今年1月份至4月份&#xff0c;打印…

进程等待

文章目录 一、进程的结果二、进程等待 一、进程的结果 在现实生活中找别人帮忙办事&#xff0c;别人同意帮忙之后&#xff0c;会反馈给自己的结果无非就是三种&#xff1a; 别人把事办完了&#xff0c;结果是自己想要的别人把事办完了&#xff0c;由于办事的方法错误&#xf…

利用代理ip实现自动化爬虫任务管理

我们在进行爬虫任务管理时&#xff0c;需要对爬取目标、爬取频率、数据存储等多个方面进行规划和管理。使用HTTP代理可以帮助我们提高爬虫效率&#xff0c;同时也可以实现自动化的爬虫任务管理。下面我们来分析一下怎么利用代理ip实现自动化爬虫任务管理。 一、选择代…

Server - 配置 Kubeflow Notebooks 的 JupiterLab 环境

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131231501 Kubeflow 的 Notebook 功能是一种方便的方式&#xff0c;让用户可以在 Kubernete s集群上创建和管理交互式的 Jupyter Notebo…

招生 | 北京大学—知识图谱能力提升培训

北京大学继续教育项目 《北京大学—知识图谱能力提升培训班》 招生简章 培训安排 &#xff08;一&#xff09;培训时间 上课时间&#xff1a;2023年7月15日—7月17日 上课方式&#xff1a;在北京大学燕园校区&#xff08;校本部&#xff09;线下集中授课 &#xff08;二&a…

科技云报道:大模型时代,AI基础软件机会何在?

科技云报道原创。 大模型时代&#xff0c;离不开算力&#xff0c;算法、数据的喂养。如果将视角放至整个产业链上&#xff0c;算法背后&#xff0c;还有一个关键要素值得被关注&#xff0c;那就是AI基础软件。 算法是实现AI功能的关键&#xff0c;而基础软件则为算法提供运行…

【Unity】代码控制视频的播放(视频播放器-更新)

结果如上图&#xff0c;之前写过一个使用代码控制视频播放器的Demo&#xff0c;但是好多小伙伴说我附带的链接没法下载&#xff0c;这次我直接做一个完整版的&#xff0c;不用下载&#xff0c;照着一步一步做就能做出来。 之前写了如何设置RawImage进行自动播放&#xff0c;大…

movetoThread应用的注意点

分析 官网的说明&#xff1a; void QObject::moveToThread(QThread *targetThread) Changes the thread affinity for this object and its children. The object cannot be moved if it has a parent. Event processing will continue in the targetThread. To move an objec…

流动微管反应器的精密压力控制解决方案

摘要&#xff1a;针对目前连续流反应器或微反应器压力控制中存在手动背压阀控制不准确、电动或气动背压阀响应速度太慢、无法适应不同压力控制范围和控制精度要求、以及耐腐蚀和耐摩擦性能较差等诸多问题&#xff0c;本文提出了相应的解决方案。解决方案的核心是分别采用了低压…

装配式从上世纪就开始了?到现在与BIM还干了这件大事!

​大家好&#xff0c;这里是建模助手。 说起装配式&#xff0c;相信各位都不会陌生。在我国传统建筑业资源浪费率高、污染重而饱受诟病的背景下&#xff0c;施工污染少、建造速度快、资源利用率高的装配式越来越受社会关注。 除了一些常规化的特点&#xff0c;如&#xff1a;…

4.2.2 基础指令的操作

显示日期与时间的指令&#xff1a; date 显示日历的指令&#xff1a; cal 简单好用的计算机&#xff1a; bc 1. 显示日期的指令&#xff1a; date 如果在命令行中想要知道目前Linux系统的时间&#xff0c;那么就直接在命令行界面输入date即可显示&#xff1a; [dmtsaistud…

小程序开发的优点和挑战:全面解析

小程序开发的优点是什么&#xff1f; 对于许多人来说&#xff0c;小程序的出现并没有给他们带来太多惊喜。然而&#xff0c;在过去的几年里&#xff0c;微信一直在努力成为更具影响力的社交平台&#xff0c;并且对于小程序开发的需求也在不断增加。随着小程序应用程序在其生态…

Spring Boot 属性加载原理解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析 在《Spring Boot 框架整体启动流程详…

MAYA柔体与弹簧一起使用 6个例子

例子2 Q弹 隐藏物体设置移动动画 例子 3 柔体和粒子 例子4 坑的反弹 例子5 例子6