首页 > 其他分享 >AsterixDB初识

AsterixDB初识

时间:2024-05-20 22:53:01浏览次数:16  
标签:AsterixDB point GeoLocation create 初识 Vehicle ID

基本概念

后台启动AsterixDB

cd ~/asterixdb/asterixdb/asterix-server/target/asterix-server-0.9.10-SNAPSHOT-binary-assembly/apache-asterixdb-0.9.10-SNAPSHOT/opt/local/bin
./start-sample-cluster.sh

修改AsterixDB代码后,调试AsterixDB;启动/asterixdb/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java

AsterixDB操作流程

  1. 创建Dataverse
    CREATE DATAVERSE Traffic IF NOT EXISTS;

  2. 使用Dataverse【每一条语句之前执行】
    USE Traffic;

  3. 设置存储类型(B-tree, R-tree等)

    CREATE TYPE TrafficRecordType AS {
        Vehicle_ID: int,
        v_Vel: float,
        Location: string
    };
    
    
  4. 创建数据库

    // 设置单一主键
    CREATE DATASET TrafficRecords(TrafficRecordType)
     PRIMARY KEY Vehicle_ID;  
     // Choose an appropriate primary key
    
    // 设置复合主键
    CREATE DATASET traffic_CSV_set(TrafficRecordType)
     PRIMARY KEY Vehicle_ID, Frame_ID;
    
  5. 创建索引(default: B-tree;可指定为R-tree)

    // 在TrafficRecords【dataset】上的GeoLocation字段,建立R-tree索引,名为TrafficRecords_Rtree
    create index TrafficRecords_Rtree on TrafficRecords(GeoLocation) type RTREE;
    
  6. 导入数据(三种方式:直接插入,导入csv文件,转化为ADM格式数据导入)

       // insert 数据
       insert into TestPoint ({
           "Vehicle_ID":1,
           "v_Vel": 2.2,
           "Location": "this is a String."
       });
       
      // 导入csv数据,csv中仅能使用int、double等基本类型
      LOAD DATASET TrafficRecords USING localfs
          (("path"="127.0.0.1:///path/data.csv"),
           ("format"="delimited-text"),
           ("delimiter"=","),
           ("quote"="\""),
           ("header"="true"));
         
      // 导入ADM格式数据
      LOAD DATASET Exper2 USING localfs    (("path"="127.0.0.1:///path/data.adm"),
       ("format"="adm"));
        
    
  7. 查询,验证数据是否导入

    SELECT * FROM TrafficRecords;
    

基本操作

  1. 删除数据类型或dataset

    • dataType 由 dataset 使用,因此在删除时需要先删除 dataset , 再删除 dataType
    • 删除dataset drop dataset TrafficRecords;
    • 删除dataType drop type TrafficRecordType;
  2. upsert语法,更新

    upsert into TrafficLSMRTree_1 ({
        "Vehicle_ID": 1,
        "Frame_ID": 271,    // 将该值由270更新为271
        "Total_Frames": 569
    });
    
  3. delete记录

    delete from TrafficLSMRTree_1 
        where Combined_ID_Time = "1,1118847869000";
    
  4. 插入空间数据

    ...
    
    // datatype
    create type pointType AS{
        Vehicle_ID: int,
        GeoLocation: point
    };
    
    create dataset TestPoint(pointType)
        primary key Vehicle_ID;
    
    insert into TestPoint ({
        "Vehicle_ID":1,
        "GeoLocation":point("5.2,10.2")
    });
    
    ...
    
    -----------------------------------
    
    GeoLocation格式:
    "GeoLocation":point(5.2,10.2)      N
    "GeoLocation":point("5.2","10.2")  N
    "GeoLocation":point("5.2,10.2")    Y
    
    -----------------------------------
    
    不能导入含有point数据的csv文件
    
  5. ADM格式数据(JSON串)

    // adm数据示例:
        [{
            "Vehicle_ID": 809,
            "v_Vel": 53.5,
            "Combined_ID_Time": "809,1118847220800",
            "GeoLocation": point("6452727.119,1871874.94")
        }]
    

数据读取

  1. 按照数据写入时的时间戳进行读取数据

    USE TrafficUS101; 
    
    SELECT *
    FROM TrafficLSMRTree_1
    WHERE Global_Time >= 1118847890000 AND Global_Time <= 1118847900000;
    
    // success
    
  2. 按照空间位置信息,即空间范围GeoLocation进行划分

    USE TrafficUS101; 
    
    SELECT * 
    FROM TrafficLSMRTree_1
    WHERE spatial_intersect(GeoLocation, create_rectangle(create_point(6451060.0, 1871870.0), create_point(6452745.0, 1873415.0)));
    
    
  3. 使用R-tree索引进行数据查询

    [AsterixDB中使用函数](AsterixDB – Builtin Functions (apache.org))

    // 点查询
    SELECT * FROM TrafficRecordsWithGeo
    WHERE spatial_intersect(GeoLocation, create_point(5.2, 10.3));
    
    // 范围查询(支持矩形、圆形等)
    SELECT * FROM TestGeoPointCSV1
    WHERE spatial_intersect(GeoLocation, create_rectangle(create_point(5.0,10.0), create_point(6.0,11.0)));
    
    // 距离查询,这条查询会返回距离点 (5.2, 10.3) 最近的1个记录。
    SELECT * FROM TestGeoPointCSV1
    ORDER BY spatial_distance(GeoLocation, create_point(5.2, 10.3))
    LIMIT 1;
    

标签:AsterixDB,point,GeoLocation,create,初识,Vehicle,ID
From: https://www.cnblogs.com/syr463/p/18202964

相关文章

  • C语言编程题练习 (从初识到入门再到进阶)修正版
    C语言编程题练习......
  • aiohttp初识(请求&响应)
    aiohttp初识(请求&响应)  aiohttp(用于asyncio和Python的异步HTTP客户端/服务器)初识1|0aiohttp客户端使用用于asyncio和Python的异步HTTP客户端/服务器:AsynchronousHTTPClient/ServerforasyncioandPython.1|1发起请求让我们从导入aiohttp模块开始:importai......
  • 初识上位机(下):C#读写PLC数据块数据
    大家好,我是Edison。作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。后续,我会考虑再出一个系列文章一起玩工控上位机。上一篇:搭建PLC模拟仿真环境复习一下在上一篇中,我们通过PLCSIMAdvanced软件创建了一个虚......
  • 初识上位机(上):搭建PLC模拟仿真环境
    大家好,我是Edison。作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。后续,我会考虑再出一个系列文章一起玩工控上位机。什么是上位机上位机,通常是指在数据采集与控制系统中位于较高层级、具有较强数据处理能力......
  • CPLEX 初识 -- JAVA实现
    CPLEX初识--JAVA实现本文参考《运筹优化常用模型、算法及案例实战》,同时也是笔者用来记录自己所学知识,如有问题欢迎交流讨论~1环境配置&模型建立需要装配jar包及配置VMoptions,如下图所示:-Djava.library.path="/Applications/CPLEX_Studio2211/java"一般使用IloCple......
  • 初识springmvc
    什么是MVC?MVC的全名是ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业......
  • 初识PostgreSql
    前言PostgreSql常被称为Postgres,简称PG,后文中以PG称呼。是当今非常流行的一种数据库。为什么使用PG在分析这个问题之前,我认为有必要说一说Oracle和MySql这两家数据库。OracleOracle作为占有率最高的数据库,由Oracle公司开发,提供商业支持,其流行的原因在于其强大的性能......
  • 初识vector
    一、定义和初始化vector1、初始化vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。如vector<int>。1、默认初始化vector<string>s;2、拷贝初始化注意:字面值不能构造vector对象vector<int>i;vecotr<int>i2(i);vector<int>i3=i;vector......
  • Docker 必知必会----初识
    什么是Docker?Docker是一个开源的容器管理引擎。开发者可以通过Docker直接管理应用程序所需要的容器。它的logo如下: 为什么需要Docker使用Docker主要有两个原因,1、屏蔽不同环境的硬件差异,减轻开发人员在不同环境上,为了适配环境差异所需要做的工作。如各项系统配置、环境变量、......
  • apache druid 初识
    一:Apachedruid是一种实时分析数据库,设计用于对大型数据集进行快速分析(OLAP),支持数据的实时摄取,提供低时延的查询性能。二:Apachedruid主要特点(1)列式存储格式,查询时只加载特定查询的列,还根据数据类型优化每一列的存储,加快查询速度。(2)可扩展的分布式系统。典型的Druid部署......