AGE agtype 简介

AGE 使用一种名为 agtype 的自定义数据类型,这是 AGE 返回的唯一数据类型。agtype 是 Json 的超集,也是 JsonB 的自定义实现。

简单数据类型

Null

在Cypher中,null用于表示缺失或未定义的值。概念上,null表示“缺失的未知值”,并且与其他值的处理方式略有不同。例如,从不具有该属性的顶点获取属性会产生null。大多数以null作为输入的表达式都会产生null。这包括在WHERE子句中用作谓词的布尔表达式。在这种情况下,任何不为true的内容都被解释为false。null不等于null。不知道两个值并不意味着它们是相同的值。因此,表达式null = null产生null而不是true。

输入/输出格式

SELECT *
FROM cypher('graph_name', $$RETURN NULL
$$) AS (null_result agtype);

null将显示为空格。

结果

null_result
(1行)

Agtype NULL与Postgres NULL

Agtype和Postgres中的NULL的概念与Cypher中的相同。

Integer

整数类型存储整数,即没有小数部分的数字。整数数据类型是一个64位字段,存储范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807的值。尝试存储超出此范围的值将导致错误。

输入/输出格式

SELECT *
FROM cypher('graph_name', $$RETURN 1
$$) AS (int_result agtype);

结果

int_result
1
(1行)

Float

浮点数据类型是一种不精确的、可变精度的数字类型,符合IEEE-754标准。

不精确意味着某些值无法精确地转换为内部格式,而是以近似值的形式存储,因此存储和检索值可能会出现轻微的差异。管理这些错误以及它们在计算中的传播是数学和计算机科学的一个整个分支的主题,这里不讨论这些内容,除了以下几点:

  • 如果需要精确的存储和计算(例如货币金额),应该使用numeric类型。
  • 如果要对这些类型进行复杂的计算,特别是在边界情况下(无穷大、下溢)依赖某些行为,应该仔细评估实现。
  • 对两个浮点数进行相等性比较可能不总是按预期工作。
  • 太大或太小的值将导致错误。如果输入数字的精度过高,则可能会进行舍入。接近零的数值,如果与零不可区分,将导致下溢错误。

除了普通的数值之外,浮点类型还具有几个特殊值:

  • 无穷大
  • 负无穷大
  • NaN

这些分别表示IEEE 754的特殊值“无穷大”、“负无穷大”和“非数字”。在Cypher命令中将这些值作为常量写入时,必须在它们周围加上引号并进行类型转换,例如

SET x.float_value = '-Infinity'::float

在输入时,这些字符串是以不区分大小写的方式识别的。

注意IEEE754规定NaN不应与任何其他浮点值(包括NaN)进行比较。然而,为了正确排序浮点数,AGE将'NaN'::float = 'NaN'::float评估为true。有关更多详细信息,请参阅“可比性和相等性”部分。

输入/输出格式

要使用浮点数,请表示为十进制值。

SELECT *
FROM cypher('graph_name', $$RETURN 1.0
$$) AS (float_result agtype);

结果

float_result
1.0
(1行)

Numeric

numeric类型可以存储非常大数量的数字。它特别推荐用于存储需要精确度的货币金额和其他数量。与可能的情况下,numeric值的计算会产生精确的结果,例如加法、减法、乘法。然而,与整数类型或浮点类型相比,numeric值的计算速度非常慢。

我们下面使用以下术语:numeric的精度是整数部分的有效数字总数,即小数点两侧的数字的数量。numeric的标度是小数点右侧的小数位数。因此,数字23.5141的精度为6,标度为4。整数可以视为具有标度为零。

未指定精度或标度将创建一个列,其中可以存储任意精度和标度的numeric值,最多达到精度的实现限制。这种类型的列不会强制输入值转换为任何特定的标度,而具有声明标度的numeric列将强制输入值转换为该标度。(SQL标准要求默认标度为0,即强制转换为整数精度。我们认为这有点无用。如果您关心可移植性,请始终明确指定精度和标度。)

注: 当在类型声明中明确指定精度时,允许的最大精度为1000;未指定精度的NUMERIC受到表8.2中描述的限制的约束。

如果要存储的值的标度大于列的声明标度,则系统将该值四舍五入到指定数量的小数位数。然后,如果小数点左侧的数字位数超过声明精度减去声明标度,则会引发错误。

numeric值在物理上存储时没有额外的前导零或尾随零。因此,列的声明精度和标度是最大值,而不是固定的分配。(在这个意义上,numeric类型更类似于varchar(n)而不是char(n)。)实际存储需求是每四个十进制数字组的两个字节,加上三到八个字节的开销。

除了普通的numeric值之外,numeric类型还允许特殊值NaN,表示“非数字”。对NaN进行的任何操作都会产生另一个NaN。在SQL命令中将该值作为常量写入时,必须将其用引号括起来,例如UPDATE table SET x = 'NaN'。

注: 在大多数“非数字”概念的实现中,NaN被认为不等于任何其他数值(包括NaN)。然而,为了允许浮点数正确排序,AGE将'NaN'::numeric = 'NaN'::numeric评估为true。有关更多详细信息,请参阅“可比性和相等性”部分。

在对值进行四舍五入时,numeric类型将值四舍五入到远离零的方向,而(在大多数计算机上)实数和双精度类型将值四舍五入到最近的偶数。例如:

输入/输出格式:

创建numeric数据类型时,需要使用::numeric数据注释。

查询

SELECT *
FROM cypher('graph_name', $$RETURN 1.0::numeric
$$) AS (numeric_result agtype);

结果:

numeric_result
1.0::numeric
(1 row)

Bool

AGE提供了标准Cypher类型布尔值。布尔类型可以有几种状态:“true”、“false”和第三种状态“unknown”,由Agtype null值表示。

布尔常量可以在Cypher查询中使用关键字TRUE、FALSE和NULL表示。

输入/输出格式

查询

SELECT *
FROM cypher('graph_name', $$RETURN TRUE
$$) AS (boolean_result agtype);

与Postgres不同,AGE的布尔输出为完整单词,即true和false,而不是t和f。

结果:

boolean_result
true
(1 row)

String


Agtype字符串 字符串文字可以包含以下转义序列:

Escape SequenceCharacter
\t制表符
\b退格
\n换行
\r回车
\f换页
\’单引号
\”双引号
\\Backslash
\uXXXXUnicode UTF-16 code point (4 hex digits must follow the \u)

输入/输出格式

使用单引号(‘)来标识字符串。输出将使用双引号(“)。

SELECT *
FROM cypher('graph_name', $$RETURN 'This is a string'
$$) AS (string_result agtype);

结果:

string_result
“This is a string”
(1 行)

复合数据类型

列表

所有示例将使用WITH子句和RETURN子句。

一般列表

通过使用方括号并用逗号分隔列表中的元素来创建文字列表。

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst
$$) AS (lst agtype);

结果:

lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(1 行)

列表中的空值

列表可以包含空值,与空值独立时不同,它会以单词“null”出现在列表中。

查询

SELECT *
FROM cypher('graph_name', $$WITH [null] as lstRETURN lst
$$) AS (lst agtype);

结果:

lst
[null]
(1 行)

访问单个元素

要访问列表中的单个元素,我们再次使用方括号。这将从起始索引提取,但不包括结束索引。

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[3]
$$) AS (element agtype);

结果:

element
3
(1 行)

在列表中映射元素

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, {key: 'key_value'}, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst
$$) AS (map_value agtype);

结果:

map_value
[0, {"key": "key_value"}, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(1 行)

在列表中访问映射元素

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, {key: 'key_value'}, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[1].key
$$) AS (map_value agtype);

结果:

map_value
“key_value”
(1 行)

负索引访问

您还可以使用负数,从列表的末尾开始。

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[-3]
$$) AS (element agtype);

结果:

element
8
(1 行)

索引范围

最后,您可以在方括号内使用范围来返回列表的范围。

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[0..3]
$$) AS (element agtype);

结果:

element
[0, 1, 2]
(1 行)

负索引范围

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[0..-5]
$$) AS (lst agtype);

结果:

lst
[0, 1, 2, 3, 4, 5]
(1 行)

正切片

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[..4]
$$) AS (lst agtype);

结果:

lst
[0, 1, 2, 3]
(1 行)

负切片

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[-5..]
$$) AS (lst agtype);

结果:

lst
[6, 7, 8, 9, 10]
(1 行)

超出范围的切片会被简单地截断,但超出范围的单个元素会返回空值。

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[15]
$$) AS (element agtype);

结果:

element
(1 行)

查询

SELECT *
FROM cypher('graph_name', $$WITH [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as lstRETURN lst[5..15]
$$) AS (element agtype);

结果:

element
[5, 6, 7, 8, 9, 10]
(1 行)

映射

映射可以使用Cypher构建。

带有简单数据类型的文字映射

您可以使用简单的agtypes构建简单映射

查询

SELECT *
FROM cypher('graph_name', $$WITH {int_key: 1, float_key: 1.0, numeric_key: 1::numeric, bool_key: true, string_key: 'Value'} as mRETURN m
$$) AS (m agtype);

结果:

m
{"int_key": 1, "bool_key": true, "float_key": 1.0, "string_key": "Value", "numeric_key": 1::numeric}
(1 行)

具有复合数据类型的字面映射

一个映射也可以包含复合数据类型,即列表和其他映射。

查询

SELECT *
FROM cypher('graph_name', $$WITH {listKey: [{inner: 'Map1'}, {inner: 'Map2'}], mapKey: {i: 0}} as mRETURN m
$$) AS (m agtype);

结果:

m
{"mapKey": {"i": 0}, "listKey": [{"inner": "Map1"}, {"inner": "Map2"}]}
(1 行)

映射的属性访问

查询

SELECT *
FROM cypher('graph_name', $$WITH {int_key: 1, float_key: 1.0, numeric_key: 1::numeric, bool_key: true, string_key: 'Value'} as mRETURN m.int_key
$$) AS (int_key agtype);

结果:

int_key
1
(1 行)

访问映射中的列表元素

查询

SELECT *
FROM cypher('graph_name', $$WITH {listKey: [{inner: 'Map1'}, {inner: 'Map2'}], mapKey: {i: 0}} as mRETURN m.listKey[0]
$$) AS (m agtype);

结果:

m
{"inner": "Map1"}
(1 行)


简单实体

实体具有唯一的、可比较的标识,该标识定义了两个实体是否相等。

实体被分配了一组属性,每个属性都由相应的属性键唯一标识。

图标识

简单实体被分配了一个唯一的图标识。图标识是实体标签ID和分配给每个标签的唯一序列的组合。请注意,当比较来自不同图形的实体时,ID会重叠。

标签

标签是将顶点和边分类到特定类别的标识符。

  • 边必须具有标签,但顶点不必。
  • 顶点和边之间的标签名称不能重叠。

有关如何使用标签创建实体的信息,请参阅CREATE子句。

属性

顶点和边都可以具有属性。属性是属性值,每个属性名称应仅定义为字符串类型。

顶点

  • 顶点是图的基本实体,具有能够独立存在的唯一属性。
  • 顶点可以被分配一个标签。
  • 顶点可以有零个或多个出边。
  • 顶点可以有零个或多个入边。

数据格式:

Attribute NameDescription
Id此顶点的图标识
label此顶点具有的标签名称
properties与此顶点关联的属性
{id:1; label: 'label_name'; properties: {prop1: value1, prop2: value2}}::vertex

将Map转换为顶点的类型转换

查询

SELECT *
FROM cypher('graph_name', $$WITH {id: 0, label: "label_name", properties: {i: 0}}::vertex as vRETURN v
$$) AS (v agtype);

结果

v
{"id": 0, "label": "label_name", "properties": {"i": 0}}::vertex
(1 row)

边是一个实体,编码了两个节点之间的有向连接,即源节点和目标节点。出边是从其源节点的视角来看的一个有向关系。入边是从其目标节点的视角来看的一个有向关系。一条边被分配一个边类型。

数据格式

属性名称描述
id此边的图标识
startid源节点的图标识
endid目标节点的图标识
label此边具有的标签名称
properties与此边关联的属性

输出:

{id: 3; startid: 1; endid: 2; label: 'edge_label' properties{prop1: value1, prop2: value2}}::edge

将Map转换为边的类型转换

查询

SELECT *
FROM cypher('graph_name', $$WITH {id: 2, start_id: 0, end_id: 1, label: "label_name", properties: {i: 0}}::edge as eRETURN e
$$) AS (e agtype);

结果:

v
{"id": 2, "label": "label_name", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge
(1 row)

复合实体

路径

路径是一系列交替的顶点和边。路径必须以一个顶点开始,并至少有一条边。

将列表转换为路径的类型转换

查询

SELECT *
FROM cypher('graph_name', $$WITH [{id: 0, label: "label_name_1", properties: {i: 0}}::vertex,{id: 2, start_id: 0, end_id: 1, label: "edge_label", properties: {i: 0}}::edge,{id: 1, label: "label_name_2", properties: {}}::vertex]::path as pRETURN p
$$) AS (p agtype);

结果已格式化以提高可读性

p
[{"id": 0, "label": "label_name_1", "properties": {"i": 0}}::vertex, {"id": 2, "label": "edge_label", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge,
{"id": 1, "label": "label_name_2", "properties": {}}::vertex]::path
(1 row)

 使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;

 

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

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

相关文章

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…

力扣 203反转链表

思路 用cur->next指向pre,把链表倒转 cur后移,cur指向原链表的下一个 注意用tmp存储原链表中cur的后一个 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *cur head; ListNode *pre nullptr; ListNode *tmp; while (cur ! nul…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; …

在小红书用AI做壁纸号,矩阵起号爆卖10000+(详细操作教程)

壁纸号领域一直是一个充满机遇的蓝海项目,由于始终有人对壁纸感兴趣,这种需求永不消逝。 随着AI绘画技术的出现,壁纸的创作更加便捷,不需要自己到处无版权地搬运或者自己动手画,更无需操心版权问题。 零成本、易操作…

羊大师:暑期不“胖”秘籍:羊奶滋养,细嚼慢咽是关键!

夏日炎炎,假期悠长,如何在享受悠闲时光的同时,保持轻盈体态,成了许多人心中的小秘密。今天,就让我们一起揭秘暑期不“胖”的秘籍,让羊奶的滋养与细嚼慢咽的智慧,成为你美丽夏日的守护神。 羊奶轻…

收银系统源码-【满额立减】功能介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

[AI 大模型] Meta LLaMA-2

文章目录 [AI 大模型] Meta LLaMA-2简介模型架构发展新技术和优势示例 [AI 大模型] Meta LLaMA-2 简介 Meta LLaMA-2 是 Meta 推出的第二代开源大型语言模型(LLM),旨在为研究和商业应用提供强大的自然语言处理能力。 LLaMA-2 系列模型包括从…

RSRS研报复现——年化21.5%,含RSRS标准分,右偏标准分的Backtrader指标计算(代码+数据)

原创文章第583篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 继续Backtrader,今天讲讲指标扩展。 作为规则型的量化框架,指标是非常重要的元素,它是策略的基础。 我们来扩展一个经典的指标,RSR…

ESP-NOW无线通信

ESP-NOW无线通信 ESP-NOW无线通信协议简介ESP-NOW单向通信ESP-NOW双向通信ESP32的MAC地址总结 ESP-NOW无线通信协议简介 ESP-NOW 是由Espressif开发的基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输…

气膜体育馆的空气质量控制系统智能化管理—轻空间

随着科技的不断进步,气膜体育馆在全球范围内得到了广泛应用。一个重要的原因是其先进的空气质量控制系统,这不仅提高了场馆内部环境的舒适度,也保障了使用者的健康安全。轻空间将详细探讨气膜体育馆的空气质量控制系统是如何实现智能化管理的…

教师管理小程序的设计

管理员账户功能包括:系统首页,个人中心,教师管理,个人认证管理,课程信息管理,课堂记录管理,课堂统计管理,留言板管理 微信端账号功能包括:系统首页,课程信息…

Web知识库应用程序LibreKB

什么是 LibreKB ? LibreKB 是一款知识库 Web 应用程序。免费、开源、自托管,基于 PHP/MySQL。 官方并没有 Docker 镜像,老苏这次图省事,并没有像往常一样构建一个镜像,而是基于 Docker 搭建了一个 LAMP 环境&#xff0…

警惕!焦虑过度的这些症状正在悄悄侵蚀你的生活!

在快节奏的现代社会中,焦虑已成为许多人生活的一部分。适度的焦虑可以激发我们的斗志,推动我们前进。然而,当焦虑过度时,它可能会变成一把双刃剑,对我们的身心健康造成严重威胁。本文将探讨焦虑过度的表现,…

【Python进阶】拷贝、闭包、装饰器,函数分类

目录 一、对象属性和类属性 1、对象属性 2、类属性 二、类方法和静态方法 1、类方法 2、静态方法 3、扩展综合案例 三、深拷贝和浅拷贝 1、浅拷贝 2、深拷贝 3、浅拷贝和深拷贝的区别 四、函数知识 1、函数的定义与调用 2、函数名记录的是引用 3、函数名当作参数…

记录|C#安装+HslCommunication安装

记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022,跳转下…

apksigner安装

apksigner安装 下载cmdline-tools获取SDK 组件如果发生报错&#xff1a;Error: Could not determine SDK root.Error: Either specify it explicitly with --sdk_root or move this package into its expected location: <sdk>\cmdline-tools\latest\&#xff0c;并把 安…

首月免月租,手机卡首月免月租什么意思?

手机卡首月免月租是真的吗&#xff1f;只有首月免吗&#xff1f;最近有不少小伙伴来咨询首月免月租这件事了&#xff0c;今天这篇文章就给大家解开这个疑惑。 话不多说&#xff0c;下面让我们直接进入正题&#xff1a; 首先&#xff0c;三大运营商的卡一般只有移动和电信的套餐…

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …

帕金森病患者应该如何确定自己每天适宜的饮水量?

帕金森病患者确定每天适宜的饮水量时&#xff0c;应该考虑到药物副作用、运动障碍和便秘等问题。建议的饮水量通常是每天6至8杯水&#xff0c;相当于约2000毫升左右。这个量可以根据个人的体重、气候条件、活动水平以及是否有其他健康问题进行适当调整。 为了科学合理地安排饮水…

半导体光伏废水深度除氟树脂

摘要&#xff1a;海普开发的HP3600纳米除氟吸附剂&#xff0c;这种树脂对水体中的氟均具有高效的选择性&#xff0c;已应用于多个领域含氟废水的处理&#xff0c;为客户提供了优质、高效的除氟解决方案。 #半导体光伏废水深度除氟树脂 半导体作为各种高新技术飞速发展的基础&a…