ibm db2 58009 |
您所在的位置:网站首页 › db2解析json的函数 › ibm db2 58009 |
最新的DB2程序临时修订(PTF)组(用于7.1的SF99701和用于7.2的SF99702)在与IBM i 7.1的Technology Refresh 10和IBM i 7.2的Technology Refresh 2相同的日期发布,其中包括JSON Store Technology Preview。 这项新功能允许使用DB2 for i数据库表存储和检索JSON文档。 此功能增加了JSON支持,该支持与为Linux,UNIX和Windows的DB2和针对z / OS的DB2添加的支持相当。 IBM i上的JSON支持包括对DB2 JSON命令行处理器和DB2 JSON Java API的支持。 本文的目的是描述IBM i上的JSON功能,并向读者介绍其他包含更多详细信息的IBMdeveloperWorks®文章。 JSON Store技术功能仅由developerWorks文章描述。 JSON格式正如DB2 JSON功能(第1部分:DB2 JSON简介)中所述,JSON是一种轻量级的格式,用于交换信息。 JSON文档很容易由Web浏览器上运行JavaScript程序创建和使用。 由于其简单的结构,JSON已成为Web应用程序信息交换的常用方法。 它之所以受欢迎是因为它比XML的替代方法要轻得多。 第1部分文章中介绍了有关JSON及其优点的更多详细信息。 有三种方法可以在IBM i上使用JSON。 db2nosql-DB2 JSON命令行处理器 DB2 JSON Java API SYSTOOLS.BSON2JSON-检索存储在DB2 for i表中的JSON文档的功能。在DB2 for i中存储JSON文档可提供出色的可靠性和可用性。 DB2 JSON存储不包括查询引擎索引支持,也不支持使用SQL语句分解和发布JSON。 db2nosql:DB2 JSON命令行处理器DB2 JSON命令行处理器包含在集成文件系统中的IBM i中。 包含处理器的完整IFS路径名是/ QIBM / ProdData / OS / SQLLIB / bin / db2nosql。 在IBM i上,从IBM i QSHELL环境中使用DB2 JSON命令行处理器。 要进入QSHELL环境,请运行“ Start QSHELL (STRQSH)命令。 通过从/ QIBM / ProdData / OS / SQLLIB / bin目录下载以下文件,也可以在客户机系统上使用DB2 JSON命令行处理器。 db2nosql db2nosql.bat jline-0.9.93.jar js.jar mongo-2.8.0.jar nosqljson.jar servlet-api.jar您还需要获取jt400.jar文件的版本,该文件可以在/ QIBM / ProdData / os400 / jt400 / lib / java6目录中找到。 将这些文件放在客户机上的相同目录中,然后运行db2nosql(在UNIX系统上)或db2nosql.bat(在Windows系统上)以启动命令行处理器。 设置Microsoft®Windows®系统(安装了FTP)的一种简单方法是启动Windows命令提示符并运行以下命令,其中MYIBMI是IBM i分区的名称。 清单1. Windows客户端设置 C:\>mkdir nosql C:\>cd nosql C:\nosql>ftp MYIBMI ftp> bin ftp> cd /QIBM/ProdData/OS/SQLLIB/bin ftp> mget * ftp> cd /QIBM/ProdData/OS400/jt400/lib/java6 ftp> get jt400.jar ftp> quit 在IBM i上启动db2nosql要在IBM i上使用命令行处理器,请使用STRQSH启动QSHELL并运行/ QIBM / ProdData / OS / SQLLIB / bin / db2nosql。 在IBM i上使用时,命令行处理器使用本机JDBC驱动程序使用当前用户的凭证连接到当前分区。 如果需要使用其他用户的凭据进行连接,则可以使用db2nosql的–user和–password参数指定这些凭据,如以下示例所示。 清单2.将db2nosql与其他用户的凭证一起使用 $ /QIBM/ProdData/OS/SQLLIB/bin/db2nosql -user myuserid-password mypassword JSON Command Shell Setup and Launcher. Type db2nosql -help to see options … IBM DB2 NoSQL JSON API 1.1.0.0 build 1.4.7 Licensed Materials - Property of IBM (c) Copyright IBM Corp. 2013,2015 All Rights Reserved. nosql>Type your JSON query and hit nosql>Type help() or help for usage information. All commands are case sensitive. 在其他平台上启动db2nosql可以在客户机系统上使用db2nosql命令来与DB2 for i中的JSON数据交互工作。 使用-hostname或-url参数指定目标IBM i分区,其中URL是JDBC样式的URL。 对于IBM i,JDBC URL必须采用jdbc:as400:partitionName的形式。 以下示例使用这些选项,分区名称为MYIBMI 。 清单3.使用db2nosql的主机名和url参数 C:\nosql>db2nosql -hostname MYIBMI -user json –password PASSWORD JSON Command Shell Setup and Launcher. db2nosql.bat is launched with several options. ... > db2nosql -url jdbc:as400:MYIBMI -user json –password PASSWORD JSON Command Shell Setup and Launcher. Type db2nosql -help to see options ...注意 : db2nosql要求在命令路径上提供Java版本。 使用的Java版本至少应为Java 6。 建立在IBM i分区上使用JSON之前,必须执行一次性设置。 这是通过使用-setup enable选项运行db2nosql来完成的,如以下示例所示。 每个IBM i分区仅需要执行一次此设置。 清单4.使用db2nosql启用JSON支持 $ /QIBM/ProdData/OS/SQLLIB/bin/db2nosql -setup enable JSON Command Shell Setup and Launcher. Type db2nosql -help to see options IBM DB2 NoSQL JSON API 1.1.0.0 build 1.4.7 Licensed Materials - Property of IBM (c) Copyright IBM Corp. 2013,2015 All Rights Reserved. Executing SQL... CDJSN1209I Database artifacts created successfully.在IBM i上,JSON文档是使用DB2 for i表的二进制大对象(BLOB)列存储的。 如果使用承诺控制,则IBM i要求在使用这些表时激活日记功能。 为了确保满足此条件,建议在SQL模式中创建JSON集合,这会自动激活模式中表的日记功能。 使用“ CREATE SCHEMA” SQL语句创建一个SQL模式。 在IBM i库中使用JSON集合而不进行日志记录会导致SQL7008“文件对操作无效”,这是使用承诺控制来操作这些表时发生的错误。 使用db2nosql有关使用db2nosql的详细信息,请参阅DB2 JSON功能,第2部分:使用命令行处理器 developerWorks文章。 在当前的文章中,我们提供了在IBM i上使用db2nosql可以实现的示例。 任何JSON 集合都映射到单个DB2 for i表。 该表位于JSON使用的任何模式中,并且专用于仅包含JSON文档。 要指定当前模式,请use db2nosql use命令。 例如,以下命令使db2nosql使用JSONLIB模式。 nosql>use JSONLIB CDJSN1214I Switched to schema: "JSONLIB"如上所述,该架构应该是使用CREATE SCHEMA SQL语句创建的架构。 如果尚未创建模式,则可以使用db.sqlUpdate()命令运行CREATE SCHEMA SQL语句。 这是一个使用db2nosql创建JSONLIB模式然后使用它的示例。 清单5.创建和使用模式 nosql>db.sqlUpdate("CREATE SCHEMA JSONLIB") 0 nosql>use JSONLIB CDJSN1214I Switched to schema: "JSONLIB" nosql>您可以使用db命令查看有关当前数据库的信息。 nosql>db Database: jdbc:db2:localhost Schema: JSONLIB为了存储JSON文档,必须存在一个JSON集合以包含这些文档。 JSON集合使用DB2 for i表存储JSON文档。 该表的唯一目的是容纳db2nosql或DB2 Java JSON API访问的JSON文档。 包含JSON集合的表包含名为ID和DATA的两列。 ID列包含插入表中的JSON文档的唯一标识符。 DATA列是一个BLOB列,其中包含JSON文档[以二进制JSON(BSON)格式表示]。 JSON文档的最大大小约为16兆字节(MB)。 创建集合的一种方法是使用db.createCollection()命令。 在JSON中,JSON集合名称区分大小写。 如果在创建集合时使用小写字母,那么将在IBM i上使用分隔名称创建表。 如果您不希望在模式中使用分隔表名,则应使用大写名称创建JSON集合。 以下命令创建JSON集合: JSONA和jsonb 。 清单6.创建JSON集合 nosql>db.createCollection("JSONA") CDJSN1006I Collection: "db.JSONLIB."JSONA"" created. Use "JSONA". nosql>db.createCollection("jsonb") CDJSN1006I Collection: "db.JSONLIB."jsonb"" created. Use "jsonb".创建JSONA和jsonb集合之后,我们可以检查IBM i上JSONLIB库的内容。 我们看到使用小写或大小写混合的JSON集合名称的影响,因为jsonb创建为带有分隔名称的FILE对象。 清单7. JSON文件对象 Work with Objects Opt Object Type Library Attribute Text "jsonb" *FILE JSONLIB PF JSONA *FILE JSONLIB PF因为DB2 for i表名称限制为128个字符,所以如果JSON集合名称仅由大写字母组成,则限制为128个字符,如果需要定界,则限制为126个字符。 创建JSON集合后,可以使用db.插入文档db. .insert( )命令。 如果该集合不存在,则insert命令将隐式创建该集合。 由于这种行为,没有必要使用前面描述的createCollection命令。 这是将简单的JSON文档插入JSONA集合的示例。 清单8.插入一个JSON文档 nosql>db.JSONA.insert({name:"George",age:20,increase:0.12}) CDJSN1000I Command successfully completed.由于JSON文档已转换为二进制格式,因此将对其进行检查以确保它是有效数据。 尝试插入无效的JSON文档会导致出现错误,如下例所示。 清单9.尝试插入无效的JSON nosql>db.JSON.insert({notvalid}) CDJSN0114E Invalid command syntax Error details shown below, but may not be the source of the problem. db.JSON.insert({notvalid}) ^ Error details: missing : after property id Column number: 25将文档插入JSON集合后,您可以使用db.检索它们db. .find()命令。 调用不带任何参数的find命令将从集合中检索所有文档,如以下示例所示。 清单10.检索所有JSON文档 nosql>db.JSONA.find() nosql>Row 1: nosql> { "_id":{"$oid":"5510844569849c86c5832917"}, "name":"George", "age":20, "increase":0.12 } nosql>CDJSN1206I "1" row(s) returned in "61" milliseconds.find命令也可以与搜索选项一起使用。 有关更多详细信息,请参阅第2部分。 以下是查找先前插入的文档的示例。 清单11.查找名称为George的JSON文档 nosql>db.JSONA.find({name:"George"}) nosql>Row 1: nosql> { "_id":{"$oid":"5510844569849c86c5832917"}, "name":"George", .. nosql>CDJSN1206I "1" row(s) returned in "240" milliseconds. 清单12.查找年龄为20岁的JSON文档 nosql>db.JSONA.find({age:20}) db.JSONA.find({age:20}) nosql>Row 1: nosql> { "_id":{"$oid":"5510844569849c86c5832917"}, "name":"George", "age":20, "increase":0.12 } nosql>CDJSN1206I "1" row(s) returned in "42" milliseconds.第2部分的文章还描述了用于查询,更新,聚合和管理JSON数据的其他选项。 第2部分中介绍的许多功能当前在IBM i上不可用。 当前不支持双向功能和时间旅行查询。 当前不支持使用索引。 同样,在sort() skip()操作之后使用任何limit()或skip()操作都不会产生预期的结果,因为limit()和skip()操作在内部应用于无序数据。 使用JSON Java APIJSON Store Technology Preview还包括一个JSON Java API,该API可通过编程方式与DB2 for i中存储的JSON文档一起使用。 您可以在developerWorks文章DB2 JSON功能,第3部分:使用Java API编写应用程序中找到有关JSON Java API的详细信息。 本文包含一个示例Java程序 ,该程序说明了Java API的某些功能。 Java API可以在上面引用的nosqljson.jar文件的com.ibm.nosql.json.api包中找到。 Java API包括以下主要对象:DB对象,DBCollection对象,DBBasicObject对象和DBCursor对象。 数据库对象JSON DB对象代表JSON数据库,并且对应于IBM i分区上的SCHEMA。 如以下示例程序所示,可以通过将JDBC连接和SCHEMA名称传递给NoSQLClient.getDB()方法来获取DB对象。 清单13.使用JDBC连接获得一个数据库对象 // Obtain a JDBC connection using the JTOpen JDBC driver String url = "jdbc:as400://"+system; Connection con = DriverManager.getConnection(url, userid, password); // get a DB object from a JDBC connection DB db = NoSQLClient.getDB(con, schema)也可以通过使用JDBC URL,用户ID和密码而不是JDBC连接来获取DB对象。 // Alternatively, you can get a DB using the JDBC url db = NoSQLClient.getDB(url, userid, password, schema);DB对象可用于运行SQL语句。 本文的示例程序使用sqlUpdate()方法运行两个SQL语句。 第一条语句确保SCHEMA存在。 第二条语句删除程序将用于存储JSON文档的表的内容。 db.sqlUpdate("CREATE SCHEMA "+schemaName); db.sqlUpdate("DELETE FROM "+schemaName+".JSONSAMPLE"); DBCollection对象DBCollection对象表示JSON文档的集合。 它是使用getCollection()方法从数据库对象中获取的。 在以下示例代码中,DB2 for i表JSONSAMPLE是getCollection()方法的目标。 DBCollection col = db.getCollection("JSONSAMPLE");当第一个项目插入JSON集合时,将创建用于保存JSON集合的表。 要将项目插入集合,请使用insert()方法。 以下示例将JSON文档插入到集合中。 清单14.插入一个JSON文档 // // JSON documents can be inserted directly into the JSON collection. // col.insert("{'name':'George','phone':'555-3232'}" ); DBBasicObject对象一个DBBasicObject包含一个JSON文档。 它可用于以编程方式构建JSON文档,然后将其插入JSON集合中。 要构建JSON文档,只需创建一个DBBasicObject对象,然后使用append方法将元素添加到文档中。 以下示例说明了JSON文档的构建并将其插入JSON集合中。 清单15.创建和插入一个DBBasicObject对象 // Create a BasicDBObject to create an object to be inserted BasicDBObject json = new BasicDBObject(); json.append("name","Harry"); json.append("phone","555-4364"); col.insert (json); DBCursor对象DBCursor对象用于从JSON集合返回JSON文档。 DBCursor对象由DBCursor的find()方法DBCollection 。 可以使用hasNext()和next()方法访问DBCursor对象的元素,如以下示例所示。 清单16.使用DBCursor访问JSON文档 System.out.println("Querying all"); DBCursor cursor = col.find(); while (cursor.hasNext()) { DBObject obj = cursor.next(); System.out.println("Retrieved: "+obj); }您可以使用find()命令指定要查找的文档。 可以使用JSON值(作为字符串传递)或DBBasicObject对象传递find()命令来完成此操作,如以下示例所示。 清单17.查找名称为George的JSON文档 cursor = col.find("{'name':'George'}"); while (cursor.hasNext()) { DBObject obj = cursor.next(); System.out.println("Retrieved: "+obj); } 清单18.查找名称为Harry的JSON文档 BasicDBObject queryObject = new BasicDBObject(); queryObject.append("name","Harry"); cursor = col.find(queryObject); while (cursor.hasNext()) { DBObject obj = cursor.next(); System.out.println("Retrieved: "+obj); }您可以在第3部分中找到有关此对象的更多详细信息。 另外,请参考Javadoc以获得Java API 。 当引用第3部分文章时,本文db2nosql部分中指定的限制也适用-特别是,不能在JSON集合上创建索引。 注意:缺乏索引支持会导致对JSON集合的查询在没有索引优化的情况下运行。 使用SQL查询生成JSON文档JSON Java API还可以使用SQL查询生成简单的JSON文档。 这些简单的JSON文档不包含JSON数组或嵌套的JSON文档。 为此,只需使用数据库对象的sqlQueryMethod()即可运行SQL查询。 这将返回一个DBCursor对象,其中包含代表查询结果行的DBObject对象。 每个DBObject对象代表一个JSON文档,其中包含由列名和列值组成的元素。 这是一个使用这种方法的代码示例,该示例从SYSTOOLS.SYSJSON_INDEX表中查询名为SCHEMA和COL的两列。 SYSTOOLS.SYSJSON_INDEX表是DB2 JSON支持人员用来跟踪IBM i上存在的JSON集合(即表)的表。 清单19.使用SQL查询生成JSON文档 cursor = db.sqlQuery("select distinct "+ "COLLECTION_SCHEMA as schema, "+ "COLLECTION as col "+ "from SYSTOOLS.SYSJSON_INDEX "+ "WHERE COLLECTION_SCHEMA='"+schema+"'"); while (cursor.hasNext()) { DBObject obj = cursor.next(); System.out.println("Retrieved: "+obj); }运行此代码示例时,将显示以下输出。 在此,SCHEMA和COL是查询中指定的列名,而JSONLIB和JSONSAMPLE是查询返回的那些列的值。 Retrieved: {"SCHEMA":"JSONLIB","COL":"JSONSAMPLE"}此功能使Java程序能够根据SQL查询轻松创建JSON文档。 从SQL访问JSON文档JSON存储技术预览版包括一个用户定义函数(UDF),该函数可用于将JSON文档从其内部二进制形式转换为其字符形式。 SYSTOOLS.BSON2JSON UDF可用于以JSON形式检索BSON文档的内容。 如上所述,JSON文档以BSON格式存储在表示JSON集合的表的DATA列中。 这是使用此UDF查看表中JSON的示例。 清单20.使用BSON2JSON查看JSON文档 >select SYSTOOLS.BSON2JSON(DATA) from JSONLIB.JSONSAMPLE … {"name":"George","phone":"555-3232"} {"name":"Harry","phone":"555-4364"}由于BSON2JSON UDF会生成CLOB,因此当STRSQL运行查询时,将显示以下输出。 BSON2JSON *POINTER *POINTER ******** End of data ********要解决此问题,请将生成的CLOB强制转换为VARCHAR,如以下示例所示。 清单21.使用CAST查看JSON文档 select CAST(SYSTOOLS.BSON2JSON(DATA) AS VARCHAR(32000)) from JSON.JSONSAMPLE … CAST function {"name":"George","phone":"555-3232"} {"name":"Harry","phone":"555-4364"} ******** End of data ********或者更好的是,使用现代化的战略界面运行交互式SQL语句。 从System i Navigator运行SQL脚本。 请参阅IBM i Access页面以获取更多详细信息。 该首选界面将带来更好的用户体验。 您可以在DB2 z / OS版的文档中找到有关SYSTOOLS.BSON2JSON UDF的更多信息。 JSON支持的局限性提醒一下,IBM i上的JSON当前不支持其他developerWorks文章中提到的以下功能。 不支持任何时间功能。 不支持在JSON文档上创建索引。 developerWorks文章提到了有线侦听器。 有线侦听器不包含在IBM i JSON支持中。 摘要本文介绍了IBM i的JSON存储技术预览。 使用DB2 JSON命令行启用JSON支持后,将使用DB2 JSON命令行和DB2 JSON Java API从DB2 for i表插入和检索JSON文档。 DB2 JSON Java API也可以用于从SQL查询构造一个简单的JSON文档。 最后,可以在SQL查询中使用SYSTOOLS.BSON2JSON UDF来查看存储在DB2 for i表中的JSON文档。 翻译自: https://www.ibm.com/developerworks/ibmi/library/i-json-store-technology/index.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |