Presto | IP 地址函数
ip_prefix(ip_address, prefix_bits) → ipprefix使用子网掩码长度 prefix_bits,返回 IP 地址 ip_address 的 IP 前缀。ip_address 可以是 VARCHAR 类型或者 IPADDRESS 类型。 示例 12345SELECT ip_prefix(CAST('192.168.255.255' AS IPADDRESS), 9);SELECT ip_prefix('192.168.255.255', 9);-- 以上两条语句的输出结果均为:-- 192.128.0.0/9 ip_subnet_min(ip_prefix) → ip_address返回子网网段 ip_prefix 指定的最小 IP 地址。 示例 12345SELECT ip_subnet_min(IPPREFIX '192.168.255.255/9');-- 输出结果为 192.128.0.0SELECT ip_subnet_min(IPPREFIX...
Presto | 字符串运算符和函数
字符串运算符|| 运算符,字符串连接运算符,将运算符左右两边的字符串进行连接,作用同函数 concat(string1, ..., stringN)。 示例 1select 'Here I am, ' || 'here I am How do you do?' 输出 1Here I am, here I am How do you do? 字符串函数需要注意的是,以下这些函数假设输入的字符串所包含的都是有效的 UTF-8 编码的 Unicode 码点。函数并没有对 UTF-8 的有效性进行明确的检查。如果输入了无效的 UTF-8,这些函数可能会返回错误的结果。无效的 UTF-8 数据可以使用 from_utf8() 函数进行修正。 此外,这些函数操作的都是 Unicode 码点,而不是用户可见的字符或字母。某些语言会将多个码点组合成单个用户感知的字符,即一种语言书写系统的基本单位。但这些函数会将每个码点视为独立的单位。 lower() 和 upper()...
Presto | Lambda 表达式
Lambda 表达式使用 -> 来表示: 12345678x -> x + 1(x, y) -> x + yx -> regexp_like(x, 'a+')x -> x[1] / x[2]x -> IF(x > 0, x, -x)x -> COALESCE(x, 0)x -> CAST(x AS JSON)x -> x + TRY(1 / 0) 大多数 SQL 表达式都可以在 Lambda 主体中使用,但有几个例外: 不支持子查询。如 x -> 2 + (SELECT 3) 不支持聚合。如 x -> max(y) 示例 以下示例演示了使用 split_to_map() 函数对字符串进行层层分割,并返回一个映射(Map)。 首先,将字符串按 ; 划分为多个键值对。 其次,进一步将每对键值对按 : 划分为键和对应的值。 如果存在键重复的情况,则调用 Lambda 表达式 (k, v1, v2) -> concat(v1, v2)...
Presto | URL 相关函数
提取相关函数URL 提取功能可以从 HTTP URLs(或任何符合 RFC 2396 的有效 URI)中提取各组成部分。支持以下语法: 1[protocol:][//host[:port]][path][?query][#fragment] 所提取的组成部分不包含 URI 语法分隔符,例如:: 或 ? 。 url_extract_fragment(url) → varchar该函数用以返回 url 地址所包含的,用以指示不同文档片段的片段标识符。 即上文提到的 [#fragment] 组成部分,指的是 # 字符之后的内容,不包含 # 符号本身。 url_extract_host(url) → varchar该函数用以解析 url 中包含的地址,并返回其主机名部分。 url_extract_parameter(url, name) → varchar该函数用以解析 url 中的查询字符串,并返回第一个名为 name 的参数的值。参数提取遵循 RFC 1866 中规定的方式。 url_extract_path(url) → varchar该函数用于解析 url...
Presto | UUID 函数
uuid() → uuid返回一个伪随机生成的 UUID(第四版本)。 示例 123select uuid();-- 输出结果为 694af1d4-c900-4950-9daf-59f0756df0d1 (END)
Ubuntu 20.04 安装 Python3.7
对于 Ubuntu 用户来说,安装 Python 3.7 的最简单方法是使用 deadsnakes PPA。它提供了对 Python 的最新更新和任何其他所需软件包的访问。 安装 Python3.7添加 PPA 源: 1sudo add-apt-repository ppa:deadsnakes/ppa -y 添加完 PPA 源后,需要运行 apt 更新: 1sudo apt update 安装 Python3.7: 1sudo apt install python3.7 验证 Python 版本: 1python3.7 --version 至此,就已经成功安装了 Python 3.7。 如果还想为 Python 3.7 安装额外的工具,例如调试模块、开发者模块、虚拟环境模块、Distutils 模块、lib2to3 工具模块、DBM.GNU 模块和 Tkinter 模块,可以运行以下命令: 1sudo apt install python3.7-dbg python3.7-dev python3.7-venv python3.7-distutils...
Ubuntu 20.04 apt upgrade Error: Could not read response to hello message from hook
当我运行 sudo apt upgrade 命令以更新 Ubuntu 子系统(WSL)中的软件包时,出现了以下错误: 123456789101112131415161718$ sudo apt upgradeReading package lists... DoneBuilding dependency treeReading state information... DoneCalculating upgrade... DoneThe following packages were automatically installed and are no longer required: ant ant-optional gdisk gir1.2-packagekitglib-1.0 jruby-openssl junit4 libappstream4 libasm-java libatasmart4 libbcpkix-java libbcprov-java libblockdev-crypto2 libblockdev-fs2 libblockdev-loop2...
Ubuntu 上运行 sudo add-apt-repository 命令时出现 command not found 错误
如果在 Ubuntu 上运行 sudo add-apt-repository 命令时出现 command not found 错误,说明你的系统中缺少 software-properties-common 包。 你可以通过以下命令来安装它: 1sudo apt install software-properties-common 安装完成后,sudo add-apt-repository 命令就可以正常使用了。 该包提供了一些管理 apt 源的实用工具,比如: add-apt-repository - 用于添加 apt 源 remove-apt-repository - 用于删除 apt 源 apt-add-repository - 同上,别名 apt-key - 用于管理 apt key apt-cache gencaches - 用于生成 apt 缓存 许多第三方工具都需要使用到这个包提供的工具来添加它们自己的 apt 源。 (END)
Ubuntu 20.04 上安装 pip3.7 错误:ModuleNotFoundError: No module named 'distutils.cmd'
我在 Ubuntu 20.04 系统上已经安装好 python3.7,然后手动安装 pip: 首先,下载 get-pip.py 文件: 1wget https://bootstrap.pypa.io/get-pip.py 然后等该文件下载完后,使用以下命令安装 pip: 1python3.7 get-pip.py 结果出现以下错误信息: 1234567891011121314151617181920$ python3.7 get-pip.pyTraceback (most recent call last): File "get-pip.py", line 32321, in <module> main() File "get-pip.py", line 135, in main bootstrap(tmpdir=tmpdir) File "get-pip.py", line 111, in bootstrap monkeypatch_for_cert(tmpdir) File...
Python 编程指南 | 如何判断一个集合是否为空
在 Python 中,集合是一种非常有用的数据结构,用于存储无序且唯一的元素。判断一个集合是否为空是很常见的操作,本文介绍了几种判断 Python 集合是否为空的方法。理解这些方法有助于我们更高效地操作和利用集合这个数据结构。 使用 len() 方法使用 len() 方法返回集合的元素数量,如果为零,则表示该集合为空,否则不为空。 示例代码: 1234567891011121314151617#!/usr/bin/env python3# -*- coding: utf-8 -*-def is_empty(s): return len(s) == 0empty_set = set()not_empty_set = set([1, 2, 3])print("`empty_set` is empty?", is_empty(empty_set))print("`not_empty_set` is empty?", is_empty(not_empty_set))""" Output: ...
Python 编程指南 | 使用 with 关键字
Python with 语句的作用是在语句块执行完毕后,自动调用 with 后面表达式的 __exit__ 方法。这允许我们不必显式地调用 close 方法,就可以确保资源总会被释放。with 语句可以使代码更清晰、更具可读性,简化了文件流、数据库连接等公共资源的管理。 使用 with 示例一个最常见的例子是打开文件,使用 with 关键字,我们可以这么写: 12with open('file.txt') as f: read_data = f.read() 使用 with 关键字,我们不必显式调用 f.close() 来关闭文件。with 语句会在读取文件后自动关闭该文件。 如果我们不使用 with 关键字,为了避免在读取文件的过程中出现异常,使文件不能被正常关闭,导致文件资源一直被该程序占用而无法被释放,我们需要使用 try…except…finally 编码范式,具体代码如下: 1234567try: f = open('file.txt') read_data = f.read()except Exception...
Ubuntu 20.04 systemctl 错误:System has not been booted with systemd as init system (PID 1). Can't operate.
在 Ubuntu 20.04 系统中,使用 systemctl 命令启动 logstash,出现以下错误: 123$ systemctl start logstashSystem has not been booted with systemd as init system (PID 1). Can't operate.Failed to connect to bus: Host is down 这是因为 systemctl 不是 Ubuntu 系统自带的命令,可以通过 apt 命令进行安装: 1sudo apt install systemctl 安装过程中,会提示你输入 Yes, do as I say! 以继续安装。 (END)
如何查看通过 systemctl 命令启动的服务的日志
systemctl 是 Linux 系统服务管理工具,它可以用来启动、停止、重启、启用或禁用系统服务。当我们启动一个服务时,systemctl 会记录服务的启动日志,我们可以通过查看这些日志来排查服务启动时的问题。 查看 systemctl 服务日志的步骤如下: 找到服务的完整名称。系统服务的名称通常以 .service 结尾,例如 httpd.service、mysql.service 等。 使用 journalctl 命令查看服务的日志。命令格式为: 1journalctl -u <服务名称> 将 <服务名称> 替换为服务的完整名称。例如,要查看 httpd 服务的日志,运行: 1journalctl -u httpd.service journalctl 会输出服务的启动日志、运行日志和停止日志。 (END)
Endpoint 是什么?
Endpoint 翻译成中文是端点、终点或终结点的意思。在通信领域,Endpoint 是指连接到网络系统的物理设备,例如移动设备、台式计算机、虚拟机、嵌入式设备和服务器。 Endpoint 定义广义上,Endpoint 一般是指连接到计算机网络并与之交换信息的物理设备。Endpoint 的一些例子是手机移动设备、台式计算机、虚拟机、嵌入式设备和服务器。物联网设备——如摄像头、照明、冰箱、安全系统、智能扬声器和恒温器——也是 Endpoint。 但在计算机网络应用领域上,Endpoint 是指网络上的一个接口或地址,通过它可以访问网络服务或应用程序。它通常向客户端提供一组可调用的接口或API。 举些例子: REST API 的 URL 就是 Endpoint,客户端可以通过这个 Endpoint 访问 API 提供的服务。 WebSocket 的 URL 就是 Endpoint,客户端可以通过这个 Endpoint 与服务器建立双向通信。 SMTP 邮件服务器的域名就是 email 发送的 Endpoint。 数据库服务器监听的 IP 和端口就是数据库的...
Filebeat 配置 Http Endpoint
Filebeat 可以通过 HTTP 终点来暴露内部的指标。这些指标对于监控 Beat 的内部状态很有用。但出于安全原因,该功能默认是禁用的。要开启该功能,需要在 filebeat.yml 文件中添加以下配置项: 12http: enabled: true 开启了该功能后,在浏览器访问地址 http://localhost:5066/stats 即可查看各项统计指标。要美化 JSON 输出数据格式,可以在该地址后面加上 ?pretty ,即:http://localhost:5066/stats?pretty 需要注意的是,这个功能目前还是实验性的。 HTTP 终点配置说明 配置 可选/必填 默认 说明 http.enabled (可选) false 启用 HTTP 终点。 http.host (可选) localhost 绑定到这个主机名、IP 地址、unix 套接字(unix:///var/run/filebeat.sock)或 Windows 命名的管道(npipe:///filebeat)。建议只使用 localhost。默认为...
Python 编程指南 | 在 JSON 序列化的过程中,如何保证对象属性中的 Unicode 或非 ASCII 字符串能够原样输出
默认情况下,当对象属性包括 Unicode 或非 ASCII 字符串时,使用 Python 的 JSON 模块进行 JSON 序列化,会将这些字符串转换为 \u 转义序列。这个转义序列由一个反斜杠(\)和一个 u 以及四个十六进制数字组成,代表该字符的 Unicode 码位。 例如,下面示例代码中,将字典对象 my_dict 序列化成 JSON 字符串后,zh 字段的值变为 \u4eba\u751f\u82e6\u77ed\uff0c\u6211\u7528Python\u3002。 123456789101112131415161718192021#!/usr/bin/env python3# -*- coding: utf-8 -*-import json# 定义一个字典对象my_dict = { "zh": "人生苦短,我用Python。", "en": "Life is short, use Python."}# 使用 json.dumps()...
Python AES 解密出错:TypeError: 'iv' is an invalid keyword argument for this function
使用 AES 算法对字符串进行解密,Python 代码片段如下: 12345678910111213141516import base64from Crypto.Cipher import AESdef aes_decrypt(encrypted_str): """使用AES加密算法对encrypted_str进行解密""" bt = encrypted_str.encode() base64_code = base64.b64decode(bt) aes = AES.new(key=encoding_aes_key.encode(), mode=AES.MODE_CBC, iv=iv.encode()) decrypted = aes.decrypt(base64_code) # 移除padding并解码 padding_length = decrypted[-1] removed_padding = decrypted[:-padding_length] #...
使用 Logstash 的 geoip 插件解析 IP 地址的归属地
本文演示如何使用 geoip 插件解析 IP 地址的归属地。 1、启动 Logstash 新建配置文件 geoip-demo.conf,并输入以下内容: 1234567891011121314input { stdin { codec => 'json' }} filter { geoip { source => '[ip]' target => source }} output{ stdout{} } 使用 -f 参数指定到配置文件 geoip-demo.conf 启动 Logstash: 1/usr/share/logstash/bin/logstash -f /mnt/d/src/yaybyc/geoip-demo.conf 如果只是为了测试,也可以不创建配置文件,直接使用 -e...
Git 标签管理——代码切换到指定的 Tag 上
本文以 Github 上的 logstash-filter-geoip 项目为例,演示如何将代码切换到指定的 Tag 上。 使用 git clone 从 Github 上将 logstash-filter-geoip 代码克隆至本地: 1git clone https://github.com/logstash-plugins/logstash-filter-geoip.git 进入代码目录: 1cd logstash-filter-geoip 使用 git tag 查看所有的 Tag: 1git tag 结果如下(注意,显示的标签列表不是按标签创建时间顺序来排序的,而是按字母排序的): 123456789101112131415161718v0.1.0v0.1.1v0.1.10v0.1.2......v7.2.1v7.2.10v7.2.11v7.2.12v7.2.13v7.2.2v7.2.3v7.2.4v7.2.5v7.2.6v7.2.7v7.2.8v7.2.9 使用 git checkout 切换至标签 v7.2.13: 1git checkout...
Linux 常用命令 | pwgen 详解
pwgen 是一个生成密码的小工具,可以通过参数生成满足各种条件的密码,如生成的密码至少要包含一个特殊字符,或生成的密码不要包含数字,或生成长度为 16 的密码等。 安装在 Ubuntu 操作系统,可以直接通过 apt-get 方式安装: 1apt-get install pwgen 在 CentOS 操作系统,需要先安装 epel-release 软件包后才能使用 yum 方式安装 pwgen。 安装 epel-release: 1yum install -y epel-release 安装 pwgen: 1yum install -y pwgen 用法1pwgen [ 选项 ] [ 密码长度 ] [ 密码数量 ] 例如,生成 4 个长度为 8 的密码: 1pwgen 8 4 结果如下: 12$ pwgen 8 4Hah8eeth ies6Yuxu iemoo1Ko aeB7shu4 pwgen 支持的选项 选项 说明 -c 或 —capitalize 在密码中至少包含一个大写字母 -A 或 —no-capitalize 不在密码中包含大写字母 -n 或...