Hive SQL 精进系列:字符串拼接的三种常用方式
Hive字符串拼接:三种常用方式深度剖析
目录
- Hive字符串拼接:三种常用方式深度剖析
- 引言
- 一、简洁直观的`||`操作符
- 1. 基础语法规则
- 2. 丰富多样的示例展示
- 3. 优势与局限分析
- 二、规范通用的`CONCAT`函数
- 1. 全面的语法解析
- 2. 生动的示例说明
- 3. 优势与局限剖析
- 三、灵活指定分隔符的`CONCAT_WS`函数
- 1. 清晰的语法介绍
- 2. 实用的示例演示
- 3. 优势与局限探讨
- 四、总结与选择建议
引言
在Hive数据处理中,字符串拼接是一项极为常见的操作。无论是整合分散的数据字段,还是构建特定格式的输出内容,字符串拼接都发挥着关键作用。在Hive里,主要存在||
操作符、CONCAT
函数和CONCAT_WS
函数这三种字符串拼接方式,它们各自具备独特的特点,适用于不同的应用场景。接下来,让我们深入探究这三种方式的具体细节。
一、简洁直观的||
操作符
1. 基础语法规则
||
操作符的语法十分简单,形式为string1 || string2
。其功能就是将左右两边的字符串直接连接起来,形成一个新的字符串。这种简洁的语法使得代码在简单拼接场景下显得格外清爽。
2. 丰富多样的示例展示
- 常量字符串的拼接实践
在SQL语句中,我们可以轻松地使用||
操作符拼接常量字符串。例如:
SELECT 'Hello' || ' World' AS result;
当执行这条语句时,Hive会迅速将'Hello'
和' World'
这两个常量字符串拼接在一起,最终输出Hello World
。这种方式对于快速构建简单的字符串组合非常高效。
- 表字段拼接的实际应用
假设我们有一张名为students
的表,其中包含first_name
和last_name
字段,现在我们需要将这两个字段拼接成完整的姓名。通过||
操作符可以这样实现:
SELECT first_name || ' ' || last_name AS full_name
FROM students;
在执行过程中,Hive会逐行读取students
表中的数据,将每行的first_name
字段值和last_name
字段值通过空格进行拼接,并将结果命名为full_name
输出。这样,我们就能轻松地得到每个学生的完整姓名信息。
3. 优势与局限分析
- 显著优势
||
操作符最大的优势在于其语法简洁直观。在简单的字符串拼接场景中,开发人员可以用最少的代码量完成拼接任务,这不仅提高了开发效率,还使得代码的阅读性大大增强。例如,在一些临时的数据处理脚本中,快速使用||
操作符进行简单拼接能够迅速得到所需结果。 - 存在局限
然而,||
操作符也存在一定的局限性,其中最突出的问题是其可移植性较差。部分数据库并不支持这种操作符进行字符串拼接,这就限制了使用||
操作符编写的代码在不同数据库环境之间的迁移。如果项目需要考虑跨数据库平台的兼容性,那么||
操作符可能并不是最佳选择。
二、规范通用的CONCAT
函数
1. 全面的语法解析
CONCAT
函数的语法为CONCAT(string1, string2, ...)
。它可以接受多个字符串参数,然后将这些参数按照顺序依次拼接起来,最终返回一个完整的拼接结果。这种语法结构使得CONCAT
函数在处理复杂拼接需求时具有很强的灵活性。
2. 生动的示例说明
- 常量字符串拼接示例
通过CONCAT
函数拼接常量字符串的操作也非常简单。例如:
SELECT CONCAT('I', ' love', ' Hive') AS message;
执行该语句后,Hive会将'I'
、' love'
和' Hive'
这三个常量字符串依次连接起来,输出I love Hive
。这种方式在构建一些需要连贯文本的场景中十分有用,比如生成特定格式的消息内容。
- 表字段拼接实例
对于表字段的拼接,CONCAT
函数同样表现出色。假设有一张addresses
表,其中包含city
和state
字段,我们希望将这两个字段拼接成完整的地址信息。可以使用以下SQL语句:
SELECT CONCAT(city, ', ', state) AS location
FROM addresses;
Hive会对addresses
表中的每一行数据进行处理,将city
字段值、逗号和空格以及state
字段值拼接在一起,并将结果命名为location
输出。通过这种方式,我们能够方便地整合地址相关的字段信息。
3. 优势与局限剖析
- 突出优势
CONCAT
函数的一个重要优势在于其形式规范统一。无论需要拼接多少个字符串,都可以通过在函数中添加参数的方式轻松实现。而且,大多数数据库都支持CONCAT
函数,这使得使用该函数编写的代码具有良好的可移植性。在一些需要考虑跨数据库平台兼容性的项目中,CONCAT
函数是进行字符串拼接的可靠选择。此外,在处理较为复杂的拼接逻辑,例如需要根据条件拼接不同数量的字符串时,CONCAT
函数的灵活性能够充分发挥作用。 - 不足之处
然而,在简单拼接场景下,CONCAT
函数相对||
操作符而言,代码会显得稍显冗长。例如,在拼接两个字符串时,使用||
操作符只需简单的一行代码,而使用CONCAT
函数则需要按照函数的语法格式进行编写,代码量会相对增加一些。
三、灵活指定分隔符的CONCAT_WS
函数
1. 清晰的语法介绍
CONCAT_WS
函数的语法为CONCAT_WS(separator, string1, string2, ...)
。这里的separator
参数是一个指定的分隔符,它用于分隔要拼接的各个字符串。这种语法设计使得CONCAT_WS
函数在处理需要特定分隔符的字符串拼接任务时具有独特的优势。
2. 实用的示例演示
- 常量字符串拼接示例
以拼接日期字符串为例,我们可以使用CONCAT_WS
函数轻松实现:
SELECT CONCAT_WS('-', '2024', '10', '01') AS date;
执行这条SQL语句后,Hive会以'-'
作为分隔符,将'2024'
、'10'
和'01'
这三个字符串拼接起来,最终输出2024-10-01
。这种方式能够方便地生成符合特定日期格式的字符串。
- 表字段拼接实例
假设我们有一张candidates
表,其中包含skill1
、skill2
和skill3
字段,现在需要将这些技能字段用逗号和空格作为分隔符拼接成一个技能列表。可以通过以下SQL语句实现:
SELECT CONCAT_WS(', ', skill1, skill2, skill3) AS skills
FROM candidates;
Hive会逐行读取candidates
表中的数据,将每行的skill1
、skill2
和skill3
字段值用逗号和空格分隔并拼接在一起,结果命名为skills
输出。这样,我们就能够清晰地将候选人的多项技能整合为一个格式化的字符串。
3. 优势与局限探讨
- 独特优势
CONCAT_WS
函数的最大优势在于其能够方便地指定分隔符,这使得拼接结果的格式更加规范。在处理需要特定格式输出的场景,如CSV文件数据的生成、日志信息的格式化等方面,CONCAT_WS
函数能够轻松满足需求。通过灵活设置分隔符,我们可以根据实际业务要求生成各种符合格式规范的字符串。 - 潜在局限
不过,CONCAT_WS
函数也存在一定的局限性。与||
操作符和CONCAT
函数相比,它多了一个分隔符参数。在不需要分隔符的简单拼接场景下,使用CONCAT_WS
函数会显得有些繁琐,因为需要额外指定一个实际上并不需要的分隔符参数,这在一定程度上增加了代码的复杂性。
四、总结与选择建议
在Hive的字符串拼接实践中,||
操作符、CONCAT
函数和CONCAT_WS
函数各有千秋:
- 当我们处于Hive环境且面临简单的字符串拼接任务时,
||
操作符凭借其简洁的语法能够快速高效地完成工作,是优先考虑的选择。 - 如果项目对代码的可移植性有较高要求,或者需要处理复杂的拼接逻辑,无论是拼接多个字符串还是根据条件进行不同方式的拼接,
CONCAT
函数规范统一的形式和广泛的数据库支持使其成为更合适的工具。 - 而当我们需要在拼接多个字符串的同时指定特定的分隔符,以获得规范格式的拼接结果时,
CONCAT_WS
函数无疑是最佳的选择。通过深入理解这三种字符串拼接方式的特点和适用场景,开发人员能够在Hive数据处理过程中更加灵活、高效地运用它们,从而提升数据处理的质量和效率。
相关文章:
Hive SQL 精进系列:字符串拼接的三种常用方式
Hive字符串拼接:三种常用方式深度剖析 目录 Hive字符串拼接:三种常用方式深度剖析引言一、简洁直观的||操作符1. 基础语法规则2. 丰富多样的示例展示3. 优势与局限分析 二、规范通用的CONCAT函数1. 全面的语法解析2. 生动的示例说明3. 优势与局限剖析 三…...
MATLAB—从入门到精通的第二天
在第一天的学习中,我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构(嵌套 if、switch)、循环类型 和 向量操作,帮助读者进一步掌握 MATLAB 的核心编程技能。 1. 条件语句进阶 1.1 嵌套…...
韦伯望远镜的拉格朗日点计算推导过程,包含MATLAB和python运动轨迹仿真代码
研究过程 起源与提出:1687 年牛顿提出 “三体问题”,旨在研究三个可视为质点的天体在相互之间万有引力作用下的运动规律,但因运动方程过于复杂,难以得到完全解。欧拉的贡献1:1767 年,瑞士数学家莱昂哈德・…...
【 现代后端架构演进:微服务设计与云原生】
现代后端架构演进:微服务设计与云原生 一、架构演进历程 1. 单体架构到分布式系统 单体架构瓶颈 典型问题:代码耦合(代码行超百万级)、扩展困难(垂直扩容成本 > 1 0 5 >10^5 >105美元/节点)、技术…...
[JAVASE] 注解
一. 注解是什么? 注解是一种为程序元素提供元数据的方法.注解就是为程序做特殊标记的. 二. java内置的注解 分别是: 作用在代码的注解是: Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 De…...
热成像仪真不错
我挂在外面的网路设备箱 室内的机柜 室外的猫 所用型号为优利德UTi160S,显示模式为(可见光与热成像)融合模式。...
Vue-Virtual-Scroller虚拟滚动
前端优化不可不避的一谈之虚拟滚动:众所周知,滚动是直挺挺的往dom树加东西,如果滚太多滚到万级,渲染过多就会卡顿,而vue-virtual-scroll的灵活懒渲染就能解决这个问题 1,下载与配置 npm install --save v…...
Matlab:矩阵运算篇——矩阵
目录 1.定义 实例——创建矩阵 实例——创建复数矩阵 2.矩阵的生成 实例——M文件矩阵 2.利用文本创建 实例——创建生活用品矩阵 3.创建特殊矩阵 实例——生成特殊矩阵 4.矩阵元素的运算 1.矩阵元素的修改 实例——新矩阵的生成 2.矩阵的变维 实例——矩阵维度修…...
[Java]使用java进行JDBC编程
首先要从中央仓库下载api(类似驱动程序),为了链接java和mysql 下载jar包,需要注意的是jar包的版本要和mysql保持一致 下面是新建文件夹lib,把jar包放进去,并添加为库 sql固定的情况下运行 import com.mysql.cj.jdbc.MysqlDataSo…...
HippoRAG 2 原理精读
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 整体流程离线索引阶段在线检索和问答阶段 总结 整体流程 从上图可以看出,整个流程分为两个阶段 1、离线索引阶段 2、在线检索和问答阶段 离线索引阶段…...
HTTPS协议原理:在Linux世界里的加密冒险
大家好,欢迎来到这次奇妙的HTTPS协议探险之旅!今天,我们将一起潜入Linux的深处,揭开HTTPS协议那神秘而迷人的面纱。别担心,即使你是技术小白,也能在这场冒险中找到乐趣和收获。想象一下,你是一位…...
Spring Boot启动流程及源码实现深度解析
Spring Boot启动流程及源码实现深度解析 一、启动流程概述 Spring Boot的启动流程围绕SpringApplication类展开,核心流程可分为以下几个阶段: 初始化阶段:推断应用类型,加载ApplicationContextInitializer和ApplicationListene…...
使用pip在Windows机器上安装Open Webui,配合Ollama调用本地大模型
之前的文章分享过在 linux 服务器上安装,并使用Open-webui 来实现从页面上访问本地大模型的访问。也写了文章分享了我在家里 Windows Server 台式机上安装 Ollama 部署本地大模型,并分别使用 Chatbox 和 CherryStudio 来访问本地的大模型。今天我来分享一…...
go map的声明和使用
1.简介 map是key-value数据结构,又称为字段或者关联数据。类似其他语言的集合,map在go中是引用类型,必须初始化才能使用。 2.语法 map[keytype]valuetype keytype:表示间的类型。可以是基本数据类型,还可以是指针、channl等。…...
word毕业论文“et al.”替换为“等”——宏
Sub 中文参考文献改等()中文参考文献改等 宏Selection.Find.ClearFormattingSelection.Find.Replacement.ClearFormattingWith Selection.Find.Text "([一-龥], )et al.".Replacement.Text "\1等.".Forward True.Wrap wdFindContinue.Format False.Ma…...
23. 观察者模式
原文地址: 观察者模式 更多内容请关注:智想天开 1. 观察者模式简介 观察者模式(Observer Pattern)是一种行为型设计模式,用于建立对象之间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都…...
go的”ambiguous import in multiple modules”
执行“go mod tidy”报如下错误: go mod tidy -compat1.17 go: finding module for package github.com/gomooon/goredis go: found github.com/gomooon/goredis in github.com/gomooon/goredis v0.3.5 go: github.com/gomooon/core importsgithub.com/gomooon/gor…...
【鸿蒙开发】MongoDB入门
https://www.mongodb.com/try/download/community 下载MongoDB: var mongoose require("mongoose");// localhost 域名,代表本机 // 127.0.0.1 ip , 代码本机 mongoose.connect("mongodb://localhost:27017/jiaju").then(() > {console.l…...
【应用篇】MLU上deepseek/QwQ-32B+dify实现workflow应用
文章目录 前言一、平台环境选择二、创建容器应用三、启动服务1.下载deepseekR1-14B模型2.VLLM启动服务3.postman测试服务 四、workflow搭建1.搭建第一个工作流2.详细配置 五、效果演示 前言 本章主要讲解如何用paas平台,实现智能体应用 本章中大模型我们使用deeps…...
vue组件库el-menu导航菜单设置index,地址不会变更的问题
请先确认 1.路由已配置好 route-index.js如下, 2.view-ProHome.vue中已预留路由展示位 3.导航菜单复制组件库,并做修改 其中index与路由配置的地址一致 运行后发现点击菜单,url地址还是不变,查看组件库 Element - The worlds …...
防抖和节流
防抖(Debounce)和节流(Throttle)是前端开发中常用的两种性能优化技术,主要用于控制高频事件的触发频率,避免不必要的性能消耗。 1. 防抖(Debounce) 防抖的核心思想:在事…...
Deepseek可以通过多种方式帮助CAD加速工作
自动化操作:通过Deepseek的AI能力,可以编写脚本来自动化重复性任务。例如,使用Python脚本调用Deepseek API,在CAD中实现自动化操作。 插件开发:结合Deepseek进行二次开发,可以创建自定义的CAD插件。例如&a…...
基于Spring Boot的宠物猫认养系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器
开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…...
Vue3 模板引用:打破数据驱动的次元壁(附高阶玩法)
在数据驱动的Vue世界中,模板引用(Template Refs)是我们与真实DOM对话的秘密通道。本文将带你深入理解这个"逃生舱"的正确打开方式,并分享实战中的高阶技巧。 一、基础入门:建立DOM连接 1. 创建模板引用 &…...
第五天 Labview数据记录(5.5 SQL数据库读写)
5.5 SQL数据库读写 SQL 数据库读写操作是现代软件开发、数据分析和企业信息系统的核心功能。其意义不仅体现在技术层面,还涉及到业务流程优化、数据管理、决策支持等多个方面。以下是 SQL 数据库读写操作的重要意义:1. 数据存储与管理;2. 支…...

微信小程序项目引入图片问题:Error: module ‘assets/img/topImg.jpg.js‘ is not defined
问题与处理策略 问题描述 在微信小程序项目中,通过 require 引入图片文件,报如下错误 Error: module assets/img/topImg.jpg.js is not defined, require args is ../../assets/img/topImg.jpg# 翻译错误:未定义模块“assets/img/topImg.…...
02C#基本结构篇(D4_注释-访问修饰符-标识符-关键字-运算符-流程控制语句)
目录 一、注释 1. 单行注释 2. 多行注释 3. XML文档注释 4. 使用建议和最佳实践: 二、访问修饰符 1. public 2. private 3. protected 4. internal 5. protected internal 或 protected and internal 6. private protected 或 private and protected 7.…...
Python:正则表达式
正则表达式的基础和应用 一、正则表达式核心语法(四大基石) 1. 元字符(特殊符号) 定位符 ^:匹配字符串开始位置 $:匹配字符串结束位置 \b:匹配单词边界(如 \bword\b 匹配…...
ChatGPT4.5详细介绍和API调用详细教程
OpenAI在2月27日发布GPT-4.5的研究预览版——这是迄今为止OpenAI最强大、最出色的聊天模型。GPT-4.5在扩大预训练和微调规模方面迈出了重要的一步。通过扩大无监督学习的规模,GPT-4.5提升了识别内容中的模式、建立内容关联和生成对于内容的见解的能力,但…...
linux makefile tutorial
一个makefile的教程,几个小时就能看完,对makefile有个总体加细节的系统了解,非常不错: Learn Makefiles With the tastiest examples 中文翻译版: 起步 - Makefile 教程 (gavinliu6.github.io) gcc官网手册&#x…...
学习C2CRS Ⅲ (Response Generation Module)
代码地址:https://github.com/RUCAIBox/WSDM2022-C2CRS 论文地址:https://arxiv.org/abs/2201.02732 CFSelectionConvModel模型结构与功能 CFSelectionConvModel 是一个用于对话推荐系统的端到端模型,结合了知识图谱(KG)、评论信息和对话上下文来生成对话响应。它通过以…...
SpringBoot全栈开发:从数据库到Markdown文件导出的终极实践指南
一、SpringBoot后端核心实现 1.1 数据库数据转MD文件 通过SpringBoot实现数据库内容导出为Markdown文件,是文档自动化生成的关键技术: GetMapping("/download") public void exportMd(HttpServletResponse response, Integer id) {Content …...
go函数详解
1.简介 函数是组织好的、可重复使用的,用于执行指定任务的代码块,为了完成某一个功能的程序指令的集合,称为函数。go语言中支持:函数、匿名函数和闭包。 2.函数的定义 func 函数名 (形参列表) (返回值列表){ 函数体 return …...
MVCC实现原理
一、引言 在现代数据库管理系统中,数据的一致性和并发性是两个至关重要的特性。传统的锁机制虽然有效,但也存在着性能瓶颈,特别是在高并发环境下,锁的争用会导致系统响应时间变慢,甚至引发死锁等问题。为了克服这些挑…...
通过Golang的container/list实现LRU缓存算法
文章目录 力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2. 插入元素3. 删除元素4. 遍历链表5. 获取链表长度使用场景注意事项 源代码阅读 在 Go 语言中,container/list 包提供了一个双向链表的实现。链表是一种常见的数据结构&#…...
网络编程7天学java
* 网络编程:两台或两台以上的主机构成一个网络 * IP地址:标志网络中的一个通信实体的地址 * 端口号:区分不同应用程序 * 网络通信协议:ISO参考模型(7层),TCP/IP协议(4层)…...
在 IntelliJ IDEA 中配置 Git
1. 确保已安装 Git 在配置之前,确保你的系统已经安装了 Git。 检查是否已安装 Git: bash 复制 git --version 如果未安装,请前往 Git 官网 下载并安装。 2. 在 IntelliJ IDEA 中配置 Git 打开 IntelliJ IDEA。 进入设置: Windo…...
【Godot4.4】Rect2总结
概述 Rect2是2D场景中比较重要的一种数据类型。 Rect2的本质含义是2D场景的轴对齐包围盒,而不是可以自由变换的矩形。 Rect2提供了一些方法,可以方便的判断Rect2之间是否重叠、包含等,并可以获得重叠的区域。也可以获得两个Rect2的包围盒。…...
git使用命令总结
文章目录 Git 复制创建提交步骤Git 全局设置:创建 git 仓库:已有仓库? 遇到问题解决办法:问题一先git pull一下,具体流程为以下几步: 详细步骤 Git 复制 git clone -b RobotModelSetting/develop https://gitlab.123/PROJECT/123.git创建提…...
Unity DOTS从入门到精通之 C# Job System
文章目录 前言安装 DOTS 包C# 任务系统Mono 环境DOTS 环境运行作业NativeContainer 前言 作为 DOTS 教程,我们将创建一个旋转立方体的简单程序,并将传统的 Unity 设计转换为 DOTS 设计。 Unity 2022.3.52f1Entities 1.3.10 安装 DOTS 包 要安装 DOTS…...
linux下的网络抓包(tcpdump)介绍
linux下的网络抓包[tcpdump]介绍 前言tcpdump1. 安装 tcpdump2. 基本抓包命令3. 过滤器使用4. 保存捕获的数据包 异常指标1. 连接建立与断开相关指标异常 SYN 包异常 FIN 或 RST 包 2. 流量相关指标异常流量峰值异常源或目的 IP 流量 3. 端口相关指标异常端口使用端口扫描 4. 数…...
深入理解 Linux 中的 -h 选项:让命令输出更“人性化”
在 Linux 系统中,命令行工具是系统管理员和普通用户最常用的交互方式之一。然而,命令行输出往往充满了技术性术语和数字,对于初学者或非技术用户来说可能显得晦涩难懂。幸运的是,许多 Linux 命令都提供了一个非常实用的选项&#…...
selenium的鼠标操作
1、鼠标操作 鼠标时间对应的方法在那个类中? ActionChains类,实例化 鼠标对象 1、context_click(element) # 右击 2、double_click(element) #双击 3、double_and_drop(source, target) # 拖拽 4、move_to_element(element) # 悬停 【重点】 5、perform() …...
STM32——GPIO介绍
GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…...
Word 小黑第15套
对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 (脚注默认位于底部 )在脚注插入文档属性: -插入 -文档部件 -域 类别选择文档信息,域…...
linux自启动服务
在Linux环境中,systemd是一个系统和服务管理器,它为每个服务使用.service文件进行配置。systemctl是用于控制系统服务的主要工具。本文将详细介绍如何使用systemctl来管理vsftpd服务,以及如何设置服务自启动。 使用Systemd设置自启动服务 创…...
react使用拖拽,缩放组件,采用react-rnd解决 -完整版
屏幕录制2025-03-10 10.16.06 以下代码仅提供左侧可视化区域 右侧数据根据你们的存储数据来 大家直接看Rnd标签设置的属性即可!!!!! /*** 用户拖拽水印的最终位置信息*/ export interface ProductWatermarkValue {wat…...
通过 ElasticSearch的Python API和`curl` 命令获取Elasticsearch 所有索引名称
导言 在大数据管理和实时搜索场景中,Elasticsearch 是一款不可或缺的工具。无论是开发调试、数据维护,还是系统监控,快速列出所有索引名称都是一个高频需求。本文将手把手教你如何通过 Python 客户端连接 Elasticsearch,并用两种方…...
Flutter:StatelessWidget vs StatefulWidget 深度解析
目录 1. 引言 2. StatelessWidget(无状态组件) 2.1 定义与特点 2.2 代码示例 3. StatefulWidget(有状态组件) 3.1 定义与特点 3.2 代码示例 4. StatelessWidget vs StatefulWidget 对比 5. StatefulWidget 生命周期 5.1…...