关于表格:常用的表格检测识别方法表格区域检测方法上

  罕用的表格检测识别方法表格检测辨认个别分为三个子工作:表格区域检测、表格构造辨认和表格内容辨认。本章将围绕这三个表格辨认子工作,从传统办法、深度学习办法等方面,综述该畛域国内国外的倒退历史和最新进展,并提供几个先进的模型办法。 3.1 表格区域检测办法 表格检测曾经被钻研了一段较长的工夫。钻研人员应用了不同的办法,能够分为如下: 1.基于启发式的办法 2.基于机器学习的办法 3.基于深度学习的办法 编辑   基于启发式的办法,次要用于20世纪90年代、2000年代和2010年初。他们应用了不同的视觉线索,如线条、关键词、空间特色等,来检测表格。 Pyreddy等人提出了一种应用字符对齐、孔和间隙来检测表格 的办法。Wang等人应用了一种统计办法来依据间断单词之间的间隔来检测表线。将程度间断的单词与垂直相邻的线分组起来,提出候选表实体。Jahan等人提出了一种应用单词间距和线高的部分阈值来检测表格区域的办法。 Itonori提出了一种基于规定的办法,通过文本块排列和规定行地位来定位文档中的表格。 Chandran和Kasturi开发了另一种基于垂直和水平线的表格检测办法。Wonkyo Seo等人应用连接点(水平线和垂直线的交点)检测进行进一步解决。 Hassan等人通过剖析文本块的空间特色来定位和宰割表格。Ruffolo等人介绍了PDF-TREX,这是一种用于单列PDF文档中的表格辨认的启发式自下而上的办法。它应用页面元素的空间特色来将它们对齐和分组为段落和表格。Nurminen提出了一套启发式办法来定位具备公共对齐的后续文本框,并确定它们作为一个表格的概率。 Harit等人提出了一种基于惟一表起始和尾部模式识别的表格检测技术。Tupaj等人提出了一种基于OCR的表格检测技术。该零碎基于关键字搜寻相似表格的行序列,上述办法在具备对立布局的文档上成果比拟好。 国内的表格区域检测钻研起步较晚,启发式办法较少。其中,具备代表性的是Fang等人提出的基于表格结构特征和视觉分隔符的办法。该办法以PDF文档为输出,分四步进行表格检测:PDF解析,页面布局剖析,线条检测和页面分隔符检测,表格检测。在最初的表格检测局部中,通过对上一步检测出的线条和页面分隔符进行剖析失去表格地位。然而,启发式规定须要推广到更宽泛的表格品种,并不真正适宜通用的解决方案。因而,开始采纳机器学习办法来解决表检测问题。 基于机器学习的办法在2000年代和2010年代很常见。 Kieninger等人通过对单词片段进行聚类,利用了一种无监督的学习办法。Cesarini等人应用了一种改良的XY树监督学习办法。Fan等人应用有监督和无监督的办法进行PDF文档中的表格检测。Wang和Hu 将决策树和SVM分类器利用于布局、内容类型和词组特色。T. Kasar等人应用结点检测,而后将信息传递给SVM分类器。Silva等人在视觉页面元素(隐马尔可夫模型)的程序察看上利用联结概率分布,将潜在的表线合并到表中。Klampfl等人比拟了两种来自数字迷信专题文章的无监督表识别方法。Docstrum算法利用KNN将构造聚合成线,而后应用线之间的垂直距离和角度将它们组合成文本块。该算法是在1993年设计的,比本节中提到的其余办法要早。 F Shafait 提出了一种有用的表识别方法,该办法在具备类似布局的文档上体现良好,包含商业报告、新闻故事和杂志页面。Tesseract OCR引擎提供了该算法的一个开源实现。 随着神经网络的趣味,钻研人员开始将它们利用于文档布局剖析工作中。最后,它们被用于更简略的工作,如表检测。起初,随着更简单的架构的倒退,更多的工作被放到表列和整体构造辨认中。 A Gilani [《Table detection using deep learning》]展现了如何应用深度学习来辨认表格。文档图片最后是依照文中提出的办法进行预处理的。而后,这些照片被发送到一个区域候选网络中进行表格测试,而后是一个齐全连贯的神经网络。该办法对各种具备不同布局的文档图片十分准确,包含文档、钻研论文和期刊。 D Prasad [《An approach for end to end table detection and structure recognition from image-based documents》]提出了一种解释文档图片中的表格数据的主动表格检测办法,次要须要解决两个问题:表格检测和表格构造辨认。应用繁多的卷积神经网络(CNN)模型,提供了一个加强的基于深度学习的端到端解决方案,用于处理表检测和构造辨认的挑战。CascadeTabNet是一个基于级联掩码区域的CNN高分辨率网络(Cascade mask R-CNN HRNet)的模型,能够同时辨认表区域和辨认这些表格中的构造单元格。 SS Paliwal [《Tablenet: Deep learning model for end-to-end table detection and tabular data extraction from scanned document images》]提出了一种新的端到端深度学习模型,可用于表格检测和构造辨认。为了划分表格和列区域,该模型应用了表格检测和表构造辨认这两个指标之间的依赖关系。而后,从发现的表格子区域中,进行基于语义规定的行提取。 ...

May 18, 2023 · 2 min · jiezi

关于表格:场景提效多维表格重塑项目管理流程

此模板实用场景:多任务多团队之间的项目管理 预计实现成果:一张万能表格汇总所有信息,并能够按多视图进行或查看,依据待办项主动定期揭示成员同步进度。 成果比照需要旧形式新形式 对立汇总治理信息全篇文字列举,出现模式繁多,重点信息难以突出- 多种字段类型满足辨别不同格局记录的需要:单选字段可记录状态标签,人员字段可抉择项目组里的成员,数字字段可满足数字记录及统计须要。 - 分组筛选:按需分组及展现,可按须要筛选信息,疾速定位重点内容。信息聚焦,同时也能疾速关联查看相干内容多平台多工具,来回切换繁琐且效率低数据表格双向关联,不同数据表之间批改内容也会进行双向同步,保障信息的实时更新。多维度多形式查看把控我的项目信息人工保护数据内容,实现步骤简单反对多种视图看板,我的项目可按工夫线模式查看,也能够按表格模式或看板模式查看,满足我的项目信息多样化出现形式。及时获知我的项目停顿人工揭示,效率低下进度高深莫测,各模块负责的成员可不便编辑及理解我的项目停顿。应用阐明多个万能表格拆分我的项目当我的项目中有多个工作及团队时,能够将整体我的项目做拆分,创立多个万能表格页面,从不同维度治理我的项目及团队成员相干信息,重点聚焦又清晰。 通过分组结构化出现内容通过依据不同字段的分组,能够疾速对内容进行分类并展现,尤其是在内容较多时疾速划分信息层级,使整体页面信息排列更清晰。 表格数据关联,不同表格之间的信息同步更新当我的项目中数据表很多时,能够通过不同表格之间进行数据关联,实现表格信息之间的同步展现及更新。 操作步骤点击链接查看并应用模板https://www.mojidoc.com/04dbc-p34x47zxxzh4pimn7a2kjvzdb4-00b ( command/ctrl+A 全选链接内页面内容并复制至本人创立的页面中即可) 调整筛选或分组条件依据本人我的项目不同的须要,调整表格中的筛选机分组条件,适宜本人我的项目状况即可。 调整工作内容及周期依据本人我的项目的须要,调整工作表格中的内容及对应的日期。 调整表格关联字段点击数据关联的字段,抉择本人想要关联的表格并从新抉择关联字段进行展现。 分享页面设置该我的项目表格页面的权限并复制链接,发送至对应我的项目成员进行后续更新保护即可。 理解更多收费获取团队专属的定制解决方案,能够点击页面右下角的征询按钮,提供您遇到的场景及具体问题,咱们将给出解决方案并保障服务落地。 开始体验妙记多吧~

April 20, 2023 · 1 min · jiezi

关于表格:Smartbi电子表格软件架构与差异化

特色抉择和Excel联合Smartbi电子表格软件抉择与Excel联合的起因在于,Excel始终被模拟,从未被超过。尽管市场上的报表软件很多,但存在太多的不完满。国外的产品性能简单、难于学习(控件形式),做不了中国式简单格局的报表;国内厂商相继模拟Excel,尽管翻新了“类Excel”的报表模型,解决了简单格局的问题,但那究竟不是Excel,Excel泛滥的优良个性也无奈通过模拟取得,尤其在Office 2013之后!  微软CEO纳德拉(2016年7月)曾说过:Excel比Windows更平凡,此前人们难以了解数据的意义,而当初每个人都能做到。 纳德拉示意,Excel是微软带给世界的平凡发明。事实上,Excel极大简化了数据和数字剖析工作,令数据互通更加不便,令寰球企业的办公效率大幅晋升。作为国产BI厂商,咱们也始终在思考: 为什么简直所有的软件都要求导出Excel文件,甚至所有的BI和报表软件也有导出Excel性能?为什么咱们本人的治理也依赖Office Excel/WPS表格?因为Excel才是最灵便、最通用的报表设计工具,而且还能随便加工解决数据,不受制于绝对难了解的SQL等开发技术!如果咱们能正视Excel对于企业治理的价值,将其不善于的权限治理、解决性能、报表公布等问题解决掉,就能够实现强强联合,赋予传统办公软件以新的生命力。 产品架构的简略介绍报表软件也是基于网络环境的企业级软件,依照通常的体系架构划分,无外乎B/S或C/S,但两者都存在各自的劣势和劣势。 前者(B/S)更为风行,很多报表引擎都是纯浏览器模式的,但其性能的复杂度和灵活性不如后者(C/S),反之后者存在保护和治理的缺点,不如前者领有更强的适应性和可管理性。Smartbi于2013年翻新了“准B/S架构”的报表软件,其根本的架构如下图:  补充阐明: 1. 【最重要】报表开发过程和运行过程是拆散的,开发过程应用Excel(或WPS表格),但运行过程是不须要Office或者WPS; 2. 报表设计成绩是须要保留在Smartbi中的,具体位置为“知识库”,如果应用exe形式一键装置,这个知识库是自带装置的Mysql,数据库名称为电子表格软件;  报表浏览的格局为HTML5,能够被浏览器、APP、平板关上;4. 因为Excel报表是在JAVA服务器解析为HTML的,如果报表应用VB宏,是不反对的; 如果没有绑定数据库,也是能够公布的,其中静态数据都随着报表保留在知识库;如何了解“准B/S”咱们都晓得B/S是齐全基于浏览器的,但电子表格软件报表设计器须要装置4MB的程序,并联合Office Excel和WPS表格应用,除此以外B/S的特色都是合乎的,下表和支流C/S报表软件进行了比照,更有利于了解之间的差别: 要点阐明: 1. 咱们的插件既然依赖Office或WPS,就离不开Windows操作系统;(这里强调的是设计报表的电脑,不是服务器和最终浏览电脑)2. 咱们的插件只有4MB,无论在装置降级和应用中都根本无性能和空间的感知; 咱们的插件的登录形式和浏览器登录形式一样,输出账号密码(有记忆性能),无需本地激活和配置数据库连贯,但前提就是须要先装置好服务器端;怎么利用好这个架构电子表格软件是Smartbi(厂商)的产品,也是泛滥BI性能中的1个,Smartbi从头至尾在倒退“对立平台”的能力,包含元数据管理、权限管制、运维治理等平台级性能,这也是Smartbi立足于国内BI的根基。因而,了解并用好准B/S的报表软件,就要有报表治理或者开发治理的概念(理论可能不须要独自的人)。 依照“管理员”、“工程师”和“使用者”三个角色来布局软件的应用是十分要害的,也能最失当的了解咱们的架构和功能设计。  系统管理员的角色职责是零碎运维和开发治理· 零碎运维实现对知识库的治理、监控并优化零碎,以确保零碎的稳固和可用; · 开发治理不仅能够提供根底的开发条件,如数据源、用户权限等,更能够定义公共参数、转换规则、业务主题等可复用的开发资源,进步报表开发的规范性和一致性。报表工程师的角色职责是数据筹备和报表开发· 数据筹备可利用零碎提供的数据资源,也能够导入本地Excel文件作为数据源; · 报表开发是产品的外围性能,开发人员在Excel界面中实现表样的设计、数据的绑定、图形的定义、交互的设计。报表使用者的角色职责是监控和剖析报表数据 · 在多种终端查看报表,如PC、平板、手机,并联合交互性能进行报表数据分析。从数据链路理解设计思维数据链路是报表或者BI产品的外围,下图阐明了在电子表格软件产品中,数据是如何从数据源流转到报表的,其中有3条链路,它们别离有不同的作用。  抛开技术人员的偏好,仅从效率的角度来说按如下程序抉择数据链路: 1. 报表需要大多数状况是基于稳固的数据源和数据结构,这是因为其背地是绝对稳固的业务或者治理的逻辑,而且罕用的报表往往查问逻辑不简单(隐含的是报表看起来很简单)。 如果第1点并不适宜某个报表需要,往往是因为二个起因,第一是简略的SQL查问无奈解决,须要子查问、非凡的参数、非凡的函数等,第二是须要接入的是JAVA数据或者存储过程数据,并不是一般的数据库表。 最初一种是通路但不罕用,举荐的用法是对一些参考数据、主数据进行的查问。独特的差异化能力首先阐明,中国式报表常见的清单报表、穿插报表、分组报表、多源分片报表、分块报表、表单报表、套打报表、段落式报表、预警报表等,都是齐全反对的。下文次要聚焦的是差异化能力。总体来说,Smartbi 电子表格软件的差异化能力有三个方面,第一是源自多年来积淀的服务器端的能力,第二是准B/S设计器的能力,第三是Excel本身创意的能力(借花献佛)。 1.服务器端“对立平台”的特色能力· 连贯宽泛的数据:除了支流的关系数据库和大数据平台,电子表格软件还能以Excel文件(固定地位)为数据源,以及通过Excel模板采集数据。· 兼容适配的部署和集成:服务器可运行在国内外支流操作系统、中间件环境,反对集群部署;利用时反对多种集成形式,如用户集成、报表集成、挪动端集成(企业微信、钉钉等社交平台)。· “手自一体”的数据集:既能够反对灵便弱小的SQL,也容许应用无代码的形式生成数据集(需先设计业务主题),适应不同的数据筹备场景。· 牢靠的运维和治理:提供全面的平台治理和零碎运维能力,包含欠缺的权限治理、对立的系统监控、细粒度的资源迁徙、元数据影响和血统剖析、知识库定期备份、在线安全补丁、报表预缓存减速等丰盛性能。 2.准B/S设计器的根底能力· 相熟的界面,学习成本低:Office2013以上和WPS2016以上均能够应用,网络上有丰盛的模板资源和学习资源,学了能够始终用。· 兼容Excel的性能:对字体表格款式、函数和公式、图形和条件格局均有高度的兼容性,暗藏和解冻行列等罕用性能也反对。· 内置模板和标准:包含面向四种场景的报表模板,内含设计规范,利用模板可对立报表设计格调和品质。· 二次数据加工:通过“过滤”实现多数据集关联,以及特定数据的筛选;利用援用、计算、查找、统计等Excel函数进行数据处理。· 表格数据做图:不仅反对Excel动态图形,还能够用ECharts实现动静图形,包含油量图、散点图、雷达图、热力求、词云图、地图等。· 反对数据回写:通过单元格与数据字段的映射规定,实现可插入和批改数据的报表,甚至还能够同时批改多个数据表,保证数据的一致性。 3.高深莫测的Excel创意能力Excel中的高级性能十分多,数组计算、创意图形、非凡字体格局、援用计算等,比方通过辅助列作图,能够实现漏斗图、甘特图、旋风图、子弹图、手风琴图、金字塔图等等;通过图形填充能够实现山形图和拟物沉积图;通过单元格援用计算和填报属性,能够实现What-if分析模型。 这些性能不罕用,但充斥了创意和乐趣,兴许在某次图形叠加和函数计算后,你就能修炼出本人的“必杀技”,为职场之路助力!最初,咱们心愿Smartbi 电子表格软件以更加高效和灵便的形式,联合翻新的订阅式付费的翻新,带给用户无以伦比的高性价比,从而满足所有中国式报表的企业治理需要! 如果您对Smartbi电子表格软件感兴趣的话,能够点击链接收费申请试用:Smartbi试用申请 – 思迈特软件对立登录平台   

April 17, 2023 · 1 min · jiezi

关于表格:Smartbi电子表格软件产品的由来

思迈特软件(以下简称“Smartbi”)自2022年11月以来公布的「Smartbi Spreadsheet 电子表格软件」产品(以下简称“电子表格软件”或"Spreadsheet")。 从后续的介绍,你能够明确这个软件就是报表工具,那为什么不叫xxx Report,而叫电子表格软件呢?那就要提到这个产品的最大特点——基于Office Excel/WPS表格进行企业级报表设计。因而咱们用办公表格软件的品类名称——电子表格软件作为了这个产品的名称。  自2013年以来始终在报表软件市场上大受欢迎的「电子表格性能」,是思迈特软件的外围竞争力之一。它以Excel插件的模式,为客户提供真Excel报表设计器,除了易学易用之外,还具备了平安治理、报表利用、性能保障、开发集成等弱小而易用的企业级报表能力。不论用户过来是因为业务零碎报表能力有余、还是原来通过代码的形式开发报表,以前应用Excel开发离线报表的、又或者已经应用类Excel传统报表工具,在采纳了电子表格之后,报表开发效率都失去了极大的进步。 面对用户对数据利用需要的逐步晋升,Smartbi 的产品体系也在扩大,每年都有新的产品性能退出,使客户服务能力失去一直加强,电子表格也始终整合在一站式大数据平台解决方案中提供给客户。 同时咱们也留神到,依然有一部分用户的需要集中在通过工具实现疾速开发报表。当咱们与客户就这个问题进行深入探讨时,收到一些反馈: · 当下客户的需要仅仅是制作报表,而市场上好用又纯正的报表工具软件,其实并不多 · 不论客户抉择应用 Excel、代码开发、业务零碎中的二次开发能力,甚至已经应用过一些类 Excel 的报表工具,都存在应用习惯、工作效率、系统安全等各方面的问题 · 因为需要简略,波及估算不多,对性价比有更多的谋求 因而,咱们调整了产品打包策略,推出了独立的Smartbi电子表格软件产品(定位与特色)。如果想晓得它与Smartbi一站式BI的区别,能够查看我的主页。  这个产品有独立的社区文档、问答板块和官网落地页: https://www.smartbi.com.cn/spreadsheet?utm=63  咱们也心愿在将来的二十年,Smartbi电子表格软件能随同你的提高,见证中国经济的强盛!

April 17, 2023 · 1 min · jiezi

关于表格:架构级更新SpreadJS-V160重磅发布新文件结构提升性能50

近日,SpreadJS v16.0正式公布,推出了 SpreadJS 「新文件构造」,是近几个版本中最为重要的架构级更新,不仅大幅缩小了文档体积,更是将导入导出性能均匀晋升了50%,为将来的协同编辑打下了架构级的根底撑持。想理解这一新个性的细节,请持续浏览以下内容: 基本功能随着越来越多的客户应用 SpreadJS,咱们收到了越来越多的大数据量简单格式文件的用户案例。这些大的文件给产品性能带来了新的挑战。SpreadJS v16.0版本中开始正式采纳一种新的文件格式来解决这个问题。这种新的 .sjs 格局是一个压缩文件,其中蕴含多个较小的 .JSON 文件,相似于 Excel 的 XML 构造。这种新构造可能反对大型 Excel 文件并将它们导出为体积更小的文件。另外,如果一个Excel文件中有很多工作表,您能够实现疾速地按需加载工作表。要应用这种新文件格式,您不再须要导入 ExcelIO 模块,而是导入 IO 插件即可: <script src="plugins/gc.spread.sheets.io.xxx.js"></script>这种新格局能够像 SpreadJS 的 .SSJSON 文件一样导入和导出,一旦加载到 SpreadJS 中,它就能够作为 .XLSX 文件导出到 Excel。须要留神的是,这种新格局是可选的,您依然能够应用 .SSJSON 文件。但如果您心愿失去更小的文件体积和更快的性能,那么咱们建议您应用 .SJS 文件格式。除了导出到转换为工作表的 Excel 之外,SpreadJS还反对应用 集算表(TableSheets) 关上和保留新文件格式。 性能晋升新文件格式的引入,让 SpreadJS 领有了更高的导入导出性能和更小的文件体积,因为它摒弃了导出到 SSJSON 而后转换为 Excel 模型的形式,间接将数据增加一个压缩的 .SJS 文件中,其中蕴含一些较小的 .SSJSON 文件,相似于 Excel XML 构造。以前,ExcelIO Import 和 Export 实质上依赖于非凡的 JSON 和 Excel 模型来转换为 Excel XML。应用这种新格局,SpreadJS 转换为 .SJS,这是一种相似于 Excel XML 的非凡 JSON 模式,因而能够间接转换:以下是比拟 .SSJSON 和 .SJS 示例文件的一些性能数据:关上文件的工夫(单位:毫秒)保留文件的工夫(单位:毫秒)除了工夫改良外,新文件格式还包含文件大小改良:导出文件大小应用选项导出文件大小文件 ...

March 23, 2023 · 1 min · jiezi

关于表格:动辄耗资过亿的表格工具究竟难在哪儿丨思否专访

棋盘上的麦粒问题,置信每个人都据说过。那小小的 64 个棋盘格,因为一个简略的逻辑设定,便能装下全世界的的麦粒。表格工具作为办公场景中最根底也最罕用的业务撑持工具,同样具备着有限的可能。近年来,互联网、大数据、云计算、人工智能、区块链等技术减速翻新,日益融入经济社会倒退各畛域全过程。数字经济倒退速度之快、辐射范畴之广、影响水平之深前所未有,正在成为重组寰球因素资源、重塑寰球经济构造、扭转寰球竞争格局的要害力量。 软件和信息服务业作为数字经济的先导性、基础性和战略性产业,是将来数字世界的构建者和引领者。作为出名的软件开发技术和低代码平台提供商,葡萄城专一开发技术和工具四十余年,始终以来引领着国内控件技术和数据分析工具的倒退。 本期 SegmentFault 思否 x 技术人专访,采访嘉宾为西安葡萄城技术布道师姚尧。由他来为咱们分享表格工具这一看似简略、却动辄“耗资过亿”的产品,技术到底难在哪儿?到底解决了什么问题?在咱们的日常工作、生存甚至数字经济浪潮中,会表演什么样的角色? 采访对象介绍: 姚尧,西安葡萄城技术布道师,SegmentFault D-Day 技术讲师,微软开发者峰会讲师。姚尧毕业于西北工业大学计算机系,始终聚焦于前端电子表格在各行业信息化中的应用,积攒了丰盛的前端技术和行业解决方案教训,为腾讯、阿里、华为以及安全等企业提供技术咨询服务。 https://v.qq.com/x/page/y3324... 以下为采访 Q&A 的文字内容,为不便浏览略有删改。 Q1:是否用一句话来介绍 SpreadJS?提炼三个关键词,又会是哪三个?用一句话的话,我会这么说 —— “葡萄城开发的纯前端表格控件 SpreadJS 能够用不到 10 行代码,将传统 Excel 的性能和应用体验完满嵌入到在线文档零碎中。”提炼三个关键词的话我会抉择匠人、匠心、匠术。 首先,SpreadJS 是一款在界面和性能上都与 Excel 高度相似的开发控件,提供了表格文档协同编辑、 数据填报和类 Excel 报表设计的性能反对,可帮忙软件厂商和零碎集成商有效应对数据处理、数据共享和数据有效性甄别等业务需要。除了弱小的性能外,正如我的一句话介绍,SpreadJS 可帮忙开发者在不依赖任何 Excel 组件的状况下,实现“用不到 10 行代码,将 Excel 的性能和应用体验完满嵌入到在线文档零碎中。” 之所以能做到这些,在于葡萄城从 1993 年推出反对微软 Visual Basic 的控件产品,再到与微软开展继续深刻的单干,应时而变推出前端开发控件和疾速开发平台,指标便是打造出完满兼容 Excel 的性能和应用体验并高度匹配在线办公场景需要的 SpreadJS 控件。 通过 30 年的精耕细作以及对行业的了解积淀,这背地是一群匠人,凭借匠心打磨出的一款工匠级别的产品与技术。 Q2:SpreadJS 现阶段次要的利用场景有什么?次要用来解决哪些问题?很多企业的 IT 业务都是从一张表格开始的。不仅仅是数据存储,团队中的信息共享也依赖于表格这一表现形式。文档、报告、凭证以及根底数据的汇总计算,大部分是在表格的模式中实现剖析与决策的。即使表格的利用场景曾经非常宽泛,但随着业务的倒退,用户对于表格产品的性能和零碎兼容度还是能提出更高的需要,这也迫使表格产品一直的优化迭代。 现阶段,SpreadJS 次要聚焦于将来的智慧办公,利用于表格文档线上协同、数据填报、以及类 Excel 报表设计这三大利用场景。借助 SpreadJS 提供的 API 与二次扩大能力,能够让数据处理不再受硬件、操作系统与应用环境的限度,帮忙企业实现更为高效的数据处理利用。 比方 SpreadJS 中全新设计的 TableSheet 能力,除了排序、筛选、款式、行和列置顶以及单元格编辑等 WorkSheet 根底性能之外,还提供了关系数据管理、结构化公式和数据分组等实用功能。 ...

February 18, 2022 · 1 min · jiezi

关于表格:想了解表格问答我们先看看TA的前世

摘要:表格问答是一种针对自然语言问题,依据表格内容给出答案的工作。一、什么是表格问答表1是一张综艺节目收视率报表,如果你须要理解市场份额在3%以上的综艺节目,你会抉择采纳什么样的办法? 首先,用肉眼去筛选满足条件的数据,是最不便直观的办法,但显然也是效率最低的一种形式。咱们能够采纳一些工具,如Excel等,或者你能够抉择将表格导入数据库,而后应用数据库语言来进行高效的检索。然而,并不是所有人都懂SQL语法,甚至很多用户都没有接触过Excel。 这些业余工具的应用难度限度了非技术用户,给数据分析和应用带来了较高的门槛,所以咱们心愿设计一种通过自然语言来对表格数据进行检索、计算等操作的零碎,于是就有了表格问答。 表1:综艺节目收视率报表 表格问答是一种针对自然语言问题,依据表格内容给出答案的工作,它的工作能够形容为:输出一个表格汇合T(蕴含一个或多个表格)和一个自然语言模式的问题Q,输入正确的答案A。 有了表格问答,用户在查问这些表格的内容时,能够间接通过自然语言与表格进行交互,如打字或者语音输入,并且能够失去间接后果,甚至是报表,大大降低数据分析门槛,为普通用户带来高效又天然的数据查问、剖析和计算体验。 二、表格问答倒退历史表格问答次要经验了三个阶段:数据库自然语言接口、NL2SQL以及简单表格问答零碎。 1. 数据库自然语言接口表格问答的钻研最早能够追溯到数据库自然语言接口NLIDB(Natural Language Interfaces to Databases )。 NLIDB是一种容许用户通过输出某种自然语言示意的申请来拜访存储在数据库中的信息的零碎。国外NLIDB的钻研起始于20世纪60年代,80年代最为沉闷,受制于无限的自然语言理解能力,90年代热度开始衰减。 这段时间内呈现了很多NLIDB零碎:如微软的English Query,IBM的Language Access,以及BIM的LOQUI等等。中文NLIDB的钻研始于20世纪70年代末期,后续也呈现了一些中文试验模型与零碎如NChiql,NLCQI,RChiQL,以及WTCDIS等等。这些零碎次要是基于规定的办法,关键步骤次要是词法剖析、语法分析、语义剖析和生成SQL语句。 NLIDB是TableQA的前身,但它不是真正意义上的QA,而是一种把自然语言翻译成数据库语言的接口。它们齐全依赖于规定与模板,对自然语言的束缚较多,语言理解能力差,不具备较强的泛化能力。 2. NL2SQL表格问答的支流技术之一就是让自然语言更加精确地转换成SQL语言,这种办法被称为(Natural Language to SQL)NL2SQL。NL2SQL的次要工作就是将用户的自然语言语句转化为计算机能够了解并执行的标准语义示意,与KBQA相似只不过KBQA的指标逻辑模式是SPARQL。NL2SQL有许多开源数据集,如表2所示,其中最为宽泛应用的数据集,有WikiSQL、Spider等。 表2:NL2SQL数据集汇总 WikiSQL是最罕用的公开评测数据集之一,它所蕴含的NL2SQL工作比较简单,次要是单表单列查问,能够进行最大、最小、计数、求和以及均匀聚合操作,反对大于、小于和等于的条件比拟,仅反对“AND”的条件链接形式。 Spider数据集是目前畛域内最艰难的数据集之一,训练集有7000条数据,对应140个数据库,验证集有1034条数据,对应20个数据库,数据库名不重合。它反对多表多列查问,蕴含简单的子查问,以及更多的聚合操作、条件操作和排序操作等。 近年来,NL2SQL在中文畛域也呈现了一些优质的数据集,例如TableQA、DuSQL等。 3. 简单表格问答零碎随着对话畛域的不断完善和倒退,一些表格问答零碎逐步具备了上下文理解能力,表格问答与个别对话机器人的交融不断深入,造成了较为简单的表格问答零碎。这些零碎不仅可能简略的单轮问询,还能实现多轮对话,返回后果也从简略的后果汇合变成了丰盛的自然语言模式答复。 图1:简单表格问答零碎 三、表格问答的利用场景据Google2015年对互联网数据的统计,仅英文网页中蕴含的表格数目就有数百亿,阐明表格的数据量非常微小。不仅如此,表格数据高度结构化,不同表格之间不用遵循对立的本体构造和命名标准,表格的编辑和批改能够高效进行,具备较强的可编辑性和时效性。这些特点使得表格问答可能在诸多利用场景施展重要的作用。 表格问答具备两个重要的钻研方向:联合智能交互,反对对结构化数据查问与问答;优化搜索引擎,智能并高效地检索结构化文本。联合这两个钻研方向,在以下利用场景中可能施展重要作用:保费查问、客户信息查问等外部业务数据查问;笼罩行情信息、行业研报报表、财务报表等结构化数据;反对酒店信息、火车票与飞机票查问等出行场景问答;商品销量、商品详情、商品筛选与举荐等电商场景;产品信息、流动细则等新批发场景问答;话费查问、缴费查问、业务查问等日常生活问答。 四、表格问答的工程挑战表格问答具备宽泛的利用场景,然而在工程实现上也存在很多问题: 表格的辨认及规范化示意:表格默认以第一行为表头,但在理论开掘表格中,有三种状况:以第一行为表头,以第一列为表头,或者第一行和第一列独特示意表格;开掘的表格存在信息缺失问题,如表名缺失、表格值不全等;同时,面对多个表格时缺失表间链接关系。 外界常识的利用:有一些常识信息不蕴含在表格中,如排序操作的方向判断(列为“出生日期”,问题为“年龄最大的员工”)、表格值进制转换(列为“人口(亿)”,问题为“人口超5千万的城市”)等,这些信息须要引入外界常识来帮助SQL生成。 融进渐进式对话:对于用户的歧义表白和含糊表白,须要有“发问-反馈-再发问”的过程,这类问题往往须要通过多轮对话解决,而用户的问题通常是上下文相干的,因而须要模型具备基于上下文的了解和剖析能力。 表格问答具备很高的钻研价值和商业价值,很多友商和钻研机构都正在致力于表格问答的商业化和钻研。与此同时,表格问答也存在很多技术难题和工程难题,在表格问答的钻研路线上还有很长的路要走。 点击关注,第一工夫理解华为云陈腐技术~

December 2, 2020 · 1 min · jiezi

你期待的微信小程序表格组件来咯

背景在做H5开发中表格table是最常见的标签,如此好用的标签在微信小程序中却没有,无奈,叹息,绝望!!! 奔着利国利猿的使命,我*开始了造轮之路。 功能主要用于展示大量结构化数据。 支持分页,自定义操作,长表格宽表格滚动等功能。 实现前言 暴露必要属性例如表头,数据。支持外部样式控制表格。手机端的列表较轻暂时不需要暴露事件。细节 通过properties暴露了三个属性官方说明 Component({ properties: { list: { // 表格数据 type: Array, value: [] }, headers: { //表头 type: Array, value: [] }, hasBorder: { // 表格中间边框 type: String, value: "no" }, height: { //table的高度 type: Number || String, value: '' }, width: { type: Number, value: 0 }, tdWidth: { type: Number, value: 35 } }})通过externalClasses支持外部样式官方说明 /*s-class-header // 外部定义表头样式s-class-row // 外部定义行数据样式*/Component({ externalClasses: ['s-class-header', 's-class-row']})index.wxml文件通过嵌套循环动态渲染表格<view class="table table-noborder"> <view class="tr thead s-class-header"> <view wx:for="{{headers}}" class="td td-{{hasBorder}}border">{{item.display}}</view> </view> <block wx:for-item='i' wx:for="{{list}}"> <view class="tr s-class-row"> <view wx:for-item='j' wx:for="{{headers}}" class="td td-{{hasBorder}}border">{{i[j['text']]}}</view> </view> </block> </view>index.wxss 使用者对于很个性的样式可以自行修改源代码index.wxss文件.table { border: 1px solid #ccc; font-size: 28rpx; background: #fff; border-right:none;}.table-noborder { border-right:1rpx solid #ccc;} .tr{ display: flex;} .td { text-align: center; border: 1px solid #ccc; display: inline-block; border-bottom: none; flex: 1; padding: 16rpx; border-left: none;}.td-noborder{ border-right: none;} .thead .td{ border-top: none; padding: 16rpx; font-weight: bold;}#### 快速上手 ...

October 16, 2019 · 1 min · jiezi

elementUI系列elementUI中表格的筛选功能和排序功能同时使用

一、前言最近在写项目的时候,发现自己对elementUI的表格,自己想吐槽一下table的组件,可能是没有理解透文档中的说明使用。 二、需求要做成这样的: 然后左侧还有一个类似于导航的切换,也可以是tab切换。左侧是查数据库的,右侧也是查数据库的。 三、分析写代码前分析一下: (1)我打算左侧使用tab切换。原因:这个数据之间有关联,分隔内容。用导航有点大材小用。 (2)右侧的部分打算封装成组件,因为每一个tab的内容和数据很相似。这样也是前端的组件高复用,模块化开发,而且左侧导航是后端控制的,多少条不知道。 四、封装组件,父组件传值给子组件子组件和父组件之间的通信,记住父传子:props属性,子传父:this.$emit()方法,兄弟传兄弟,用vuex。 组件的布局分成三部分:介绍,表格,分页。 1、子组件 父组件给子组件传值,在组件上使用props属性,接受父组件传递的值。 2、父组件那么父组件是怎么传的呢?看下图 父组件的布局 这个是父组件,红框内容就是父组件传值方式,父组件在自己本地需要定义后边的parentData,后边的tableData。前边是传给子组件的接受名。 父组件的data 五、封装组件,子组件传值给父组件为啥子组件还需要给父组件传值,因为子组件的操作改变了数据,对父组件造成了影响。 咱么这个需求中,也是可以选择子组件不给父组件传值的,直接改变子组件中改变父组件传递过来的值。我们就当复习一下父子组件传值。 比如分页这个功能,子组件需要将第几页传给父组件。 子组件的pageChange方法: pageChange(val) { this.middleData.pageNum = val; this.$emit('childData', this.middleData) },那父组件是怎么接受这个页码的呢? childData (val) { this.paramsData.orderBy = val.orderBy; this.paramsData.dir = val.dir; this.paramsData.dimension = val.dimension; this.queryData(); }上述childData方法中父组件方法,参数就是子组件传递的数据。 六、子组件的表格的【筛选功能】和【排序功能】1、我们先看【排序功能】看一下官方文档: 我是需要后端配合使用,远程排序。所以必须设置custom。然后配合sort-change方法。不然就是前端排序 我们来看一下sortChang方法: sortChange (column, event) { this.middleData.orderBy = column.prop; if(column.order =='ascending'){this.middleData.dir = 'asc'}else if(column.order =='descending'){this.middleData.dir = 'desc'}else{this.middleData.dir = ''}; this.$emit('childData', this.middleData) },将查询的参数传递给父组件。 ...

July 5, 2019 · 1 min · jiezi

[SheetJS] js-xlsx模块学习指南

简介SheetJS是前端操作Excel以及类似的二维表的最佳选择之一,而js-xlsx是它的社区版本.js-xlsx将注意力集中到了数据转换和导出上,所以它支持相当多种类的数据解析和导出.不仅仅局限于支持xlsx格式.支持的导入格式支持的导出格式它可以:解析符合格式的数据导出符合格式的数据利用中间层操作数据可以运行在:浏览器端Node端浏览器端特色纯浏览器端解析数据纯浏览器端导出数据Node端特色读写文件流式读写本篇文章力求精简,主要讨论一下js-xlsx的工作流程和基本概念以及使用方式.概念js-xlsx提供了一个中间层用于操作数据,他将不同类型的文件抽象成同一个js对象,从而规避了操作不同种类数据数据之间的复杂性.并且围绕着这个对象提供了一系列的抽象功能,本小节主要讨论这些数据对象与Excel数据之间的关系.而浏览器端和Node端的区别仅仅在于怎样导入文件和导出文件上而已,对于数据的操作,双方的接口是一致的.引入js-xlsx的引入非常简单,浏览器端引入可以是最基本script标签的形式.<script lang=“javascript” src=“dist/xlsx.full.min.js”></script>在node端,使用npm安装如下模块:npm install xlsx –save在Node中如下引入:const xlsx = require(‘xlsx’);详细文档地址对应关系在这个表格中我列举了Excel与js-xlsx之间的关系:Excel名词js-xlsx中的抽象类型工作簿workBook工作表SheetsExcel引用样式(单元格地址)cellAddress单元格cell有了这个基本的对应关系我们就可以轻松的理解后续的操作,例如在我们使用Excel的过程中,获取一个数据的流程如下:打开工作簿打开一个工作表选中一片区域或者一个单元格针对数据进行操作保存(另存为)那么在js-xlsx中获取一个单元格内容的操作如下:// 先不要关心我们的workbook对象是从哪里来的var first_sheet_name = workbook.SheetNames[0]; // 获取工作簿中的工作表名字var address_of_cell = ‘A1’; // 提供一个引用样式(单元格下标)var worksheet = workbook.Sheets[first_sheet_name]; // 获取对应的工作表对象var desired_cell = worksheet[address_of_cell]; // 获取对应的单元格对象var desired_value = (desired_cell ? desired_cell.v : undefined);// 获取对应单元格中的数据数据格式图片:工作簿的数据结构一旦我们的Excel文件被解析那么这个Excel表中的所有内容都会被解析上面的这个对象.而且这整个过程是同步完成的.所以我们可以使用键的方式来直接获取数据,在上面的例子中我们就利用键一层层的向下获取数据.上图中常用的键一共有两个:SheetNames以字符串数组的形式保存了所有的工作表的名称Sheets下的内容都是工作表对象,而键名就是SheetNames中包含的名字而Excel的数据单位由小到大有如下排序如下:单元格工作表工作簿单元格格式在Excel中单元格有多种格式,而js-xlsx会将其解析为对应的JavaScript的格式.常见格式如下:键描述v源数据(未经处理的数据)w格式化后的文本(如果能够被格式化)t单元格类型(具体类型请看下方的表格)r解码后的富文本(如果可以被解码)h渲染成HTML格式的富文本(如果可以被解码)c单元格注释z格式化成字符串的数值(如果需要的话)完整格式链接.解析后单元格数据格式:这个数据在Excel中保存在A1的位置上,文本类型,单元格内容为xm.单元格地址js-xlsx使用有两种方式来描述操作中的单元格区域.一种是单元格地址对象(Cell address object)另外一种是地址范围(Cell range).地址对象格式如下:const start = { c: 0, r: 0 };const end = { c: 1, r: 1 };上方地址对象对应的地址范围如下:const range = ‘A1:B2’;我们不难发现两者之间对应的关系:地址对象描述的是一个起始坐标(从0开始)到结束坐标之间的范围.地址范围就是Excel中的引用样式.注意:这两个概念会在工作表读写中使用到.APIjs-xlsx提供的接口非常清晰主要分为两类:xlsx对象本身提供的功能解析数据导出数据utils工具类将数据添加到数据表对象上将二维数组以及符合格式的对象或者HTML转为工作表对象将工作簿转为另外一种数据格式行,列,范围之间的转码和解码工作簿操作单元格操作读取数据并解析这里提供一个简单的Node例子(Node10+):const xlxs = require(‘xlsx’);const {readFile} = require(‘fs’).promises;(async function (params) { // 获取数据 const excelBuffer = await readFile(’./books.xlsx’); // 解析数据 const result = xlxs.read(excelBuffer,{ type:‘buffer’, cellHTML:false, }); console.log(‘TCL: result’, result);})();还可以使用utils.book_new()创建一个新的工作簿对象:const xlsx = require(‘xlsx’), { utils } = xlsx;const workBook= utils.book_new(); // 创建一个工作簿然后使用跟多的工具来操作工作簿对象:// 接着上面的例子const ws_data = [ [ “S”, “h”, “e”, “e”, “t”, “J”, “S” ], [ 1 , 2 , 3 , 4 , 5 ]];const workSheet = XLSX.utils.aoa_to_sheet(ws_data);// 使用二维数组创建一个工作表对象utils.book_append_sheet(workBook,workSheet,‘工作表名称’);// 向工作簿追加一个工作表console.log(workBook);详细的解析文档详细解析选项数据填充工作表是实际存放数据的地方,在大部分情况下我们的操作都是对于工作表对象的操作.js-xlsx提供了多种方式来操作数据,这里提供最常见的几种操作:利用现有的数据结构创建工作表二维数组作为数据源JSON作为数据源修改工作表数据二维数组作为数据源JSON作为数据源创建工作表const workSheet = utils.aoa_to_sheet([[1,2,3,new Date()],[1,2,,4]],{ sheetStubs:false, cellStyles:false, cellDates:true // 解析为原生时间});console.log(workSheet);二维数组的关系非常容易理解,数组中的每一个数组代表一行.图片:二维数组结果const workSheet = utils.json_to_sheet([{ ‘列1’: 1, ‘列2’: 2, ‘列3’: 3 },{ ‘列1’: 4, ‘列2’: 5, ‘列3’: 6 }],{ header:[‘列1’,‘列2’,‘列3’], skipHeader:true// 跳过上面的标题行})console.log(workSheet);图片:JSON效果详细文档地址修改数据表数据const workSheet = utils.json_to_sheet([{ ‘列1’: 1, ‘列2’: 2, ‘列3’: 3 },{ ‘列1’: 4, ‘列2’: 5, ‘列3’: 6 }],{ header:[‘列1’,‘列2’,‘列3’], skipHeader:true// 跳过上面的标题行})utils.sheet_add_aoa(workSheet,[ [7,8,9], [‘A’,‘B’,‘C’]],{ origin:‘A1’ // 从A1开始增加内容});console.log(workSheet);图片:二维数组结果const workSheet = utils.json_to_sheet([{ ‘列1’: 1, ‘列2’: 2, ‘列3’: 3 },{ ‘列1’: 4, ‘列2’: 5, ‘列3’: 6 }],{ header:[‘列1’,‘列2’,‘列3’], skipHeader:true// 跳过上面的标题行})utils.sheet_add_json(workSheet,[ { ‘列1’: 7, ‘列2’: 8, ‘列3’: 9 }, { ‘列1’: ‘A’, ‘列2’: ‘B’, ‘列3’: ‘C’ }],{ origin:‘A1’,// 从A1开始增加内容 header: [‘列1’, ‘列2’, ‘列3’], skipHeader: true// 跳过上面的标题行});console.log(workSheet);图片:JSON效果详细文档地址数据导出数据导出分为两个部分:利用工具类将工作簿对象转为其他数据结构调用write或者writeFile方法转换为其他的数据结构这里就不提供详细的用例了,可以转换的格式如下:详细文档地址输出文件这里提供一个简单的Node例子(Node10+):const xlsx = require(‘xlsx’), { utils } = xlsx;const {writeFile} =require(‘fs’).promises;const workBook= utils.book_new();const workSheet = utils.aoa_to_sheet([[1,2,3]],{ cellDates:true,});// 向工作簿中追加工作表utils.book_append_sheet(workBook, workSheet,‘helloWorld’);// 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该APIconst result = xlsx.write(workBook, { bookType: ‘xlsx’, // 输出的文件类型 type: ‘buffer’, // 输出的数据类型 compression:true // 开启zip压缩});// 写入文件writeFile(’./hello.xlsx’,result).catch((error)=>{ console.log(error);});write方法文档以及输出选项支持的输出文件格式引用https://github.com/SheetJS/js… ...

January 31, 2019 · 2 min · jiezi

一个php文件就可以把数据库的数据导出Excel表格

数据库内容太多,复制粘贴太麻烦?那就用代码实现把,把代码写好了,导出还不容易吗,访问即可导出。excel.php<?php error_reporting(E_ALL ^ E_DEPRECATED); $localhost = ‘数据库地址’; $dbname = ‘数据库名’; $dbuser = ‘数据库账号’; $dbpwd = ‘数据库密码’; $tbname = “需要导出的数据库表名”; ob_end_clean(); header(‘Content-type: text/html; charset=utf-8’); header(“Content-type:application/vnd.ms-excel;charset=UTF-8”); header(“Content-Disposition:filename=data.xls”);// 文件名自己改,默认data.xls $conn = mysql_connect($localhost,$dbuser,$dbpwd) or die(“连接数据库失败”); mysql_select_db($dbname, $conn); mysql_query(“set names ‘UTF-8’”); $result=mysql_query(“SELECT * FROM $tbname”); echo “<table>”; echo “<tr>”; echo “<th>A1单元格</th>”; echo “<th>B1单元格</th>”; echo “<th>C1单元格</th>”; echo “<th>D1单元格</th>”; echo “</tr>”; echo “</table>”; while($row=mysql_fetch_array($result)){ //下面data改成你自己数据库对应的字段 $data1 = $row[“data1”]; $data2 = $row[“data2”]; $data3 = $row[“data3”]; $data4 = $row[“data4”]; //输出字段的数据到单元格 //下面data改成你自己数据库对应的字段 echo “<table>”; echo “<tr>”; echo “<td>$data1</td>”; echo “<td>$data2</td>”; echo “<td>$data3</td>”; echo “<td>$data4</td>”; echo “</tr>”; echo “</table>”; }?>然后访问excel.php就可以弹出表格下载了。作者:TANKING网站:likeyunba.com微信:likeyunba520 ...

December 28, 2018 · 1 min · jiezi

TableStore轻松实现轨迹管理与地理围栏

摘要: 基于TableStore轻松实现亿量级轨迹管理与地理围栏一、方案背景轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹、快递物流流转、车辆定位轨迹等。该场景与地理位置管理类似,核心点与瓶颈都在数据库的存储性能与查询能力,同时需要时间字段正序排列,保证轨迹点顺序;一方面,存储服务需要应对海量数据的低延迟存、读,另一方面,存储服务也要提供高效的多维度数据检索与排序。表格存储(TableStore)对于轨迹管理场景,依然可以胜任,完全具备实现轨迹管理系统的能力。不妨来体验一下基于TableStore打造的【亿量级摩托车管理系统】样例;需求场景某城市市区出于安全考虑,限制摩托车进入一定的区域范围。某摩托车租赁公司,为了更好管理所辖摩托车的违章问题,对自己所辖摩托车安装定位系统,定时采集摩托车位置。摩托车租赁公司,可以通过轨迹管理平台,查询统计违章情况,也可作为依据,提醒违章的租赁用户,过多违章拉入黑名单;查询场景:【2018年11月01日】编号【id00001】的摩托车行驶轨迹与违章情况查询;样例如下:注:该样例提供了【亿量级】轨迹数据。官网控制台地址:项目样例样例内嵌在表格存储控制台中,用户可登录控制台体验系统(若为表格存储的新用户,需要点击开通服务后体验,开通免费,订单数据存储在公共实例中,体验不消耗用户存储、流量、Cu)。表格存储(TableStore)方案采用表格存储(TableStore)轻松搭建一套:亿量级摩托车管理系统。多元索引功能提供GEO检索、多维查询的能力,通过对时间的排序获取追踪设备的轨迹。同时,用户可随时创建索引然后完成自动同步,不用担心存量数据问题。TableStore作为阿里云提供的一款全托管、零运维的分布式NoSql型数据存储服务,具有【海量数据存储】、【热点数据自动分片】、【海量数据多维检索】等功能,有效的地解决了GEO数据量大膨胀这一挑战;SearchIndex功能在保证用户数据高可用的基础上,提供了数据多维度搜索、排序等能力。针对多种场景创建多种索引,实现多种模式的检索。用户可以仅在需要的时候创建、开通索引。由TableStore来保证数据同步的一致性,这极大的降低了用户的方案设计、服务运维、代码开发等工作量。二、搭建准备若您对于基于TableStore实现的【亿量级摩托车管理系统】体验不错,并希望开始自己系统的搭建之旅,只需按照如下步骤便可以着手搭建了:1、开通表格存储通过控制台开通表格存储服务,表格存储即开即用(后付费),采用按量付费方式,已为用户提供足够功能测试的免费额度。表格存储官网控制台、免费额度说明。2、创建实例通过控制台创建表格存储实例,选择支持多元索引的Region。(当前阶段SearchIndex功能尚未商业化,暂时开放北京,上海,杭州和深圳四地,其余地区将逐渐开放)创建实例后,提交工单申请多元索引功能邀测(商业化后默认打开,不使用不收费)。邀测地址:提工单,选择【表格存储】>【产品功能、特性咨询】>【创建工单】,申请内容如下:问题描述:请填写【申请SearchIndex邀测】机密信息:请填写【地域+实例名】,例:上海+myInstanceName3、SDK下载使用具有多元索引(SearchIndex)的SDK,官网地址,暂时java、go、node.js三种SDK增加了新功能java-SDK<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore</artifactId> <version>4.7.4</version></dependency>go-SDK$ go get github.com/aliyun/aliyun-tablestore-go-sdk4、表设计店铺检索系统样例,仅简易使用一张店铺表,主要包含字段:店铺类型、店铺名称、店铺地理位置、店铺平均评分、人均消费消等。表设计如下:表名:geo_track列名数据类型索引类型字段说明_id(主键列)String MD5(mId + timestamp)避免热点mIdStirng 摩托车编号timestamplongLONG时间点(毫秒时间戳)posStringGEO_POINT车辆位置:“30.132,120.082”(纬度,精度)…………三、开始搭建(核心代码)1、创建数据表用户仅需在完成邀测的实例下创建“摩托车轨迹表”:通过控制台创建、管理数据表(用户也可以通过SDK直接创建):其他表如租赁用户表、摩托车信息表等,根据需求创建:这里仅展示轨迹表,表名:geo_track2、创建数据表索引TableStore自动做全量、增量的索引数据同步:用户可以通过控制台创建索引、管理索引(也可以通过SDK创建索引)3、数据导入插入部分测试数据(控制台样例中插入了1.08亿条(1万辆摩托70天24小时*6个"10分钟点")数据,用户自己可以通过控制台插入少量测试数据);表名:geo_track摩托车编号轨迹点md5(mId + timestamp)(主键)时间店铺位置id00001f50d55bec347253c24dc9144dff3e3b7154110360000030.30094,120.01278表名:moto_user摩托车编号(主键)摩托车颜色摩托车品牌摩托车租赁用户id00001银灰色H牌摩托车杨六4、数据读取数据读取分为两类:主键读取(摩托车信息查询)基于原生表格存储的主键列获取:getRow, getRange, batchGetRow等。主键读取用于索引(自动)反查,用户也可以提供主键(摩托车编号)单条查询的页面,查询速度极快。单主键查询方式不支持多维度检索;索引读取(轨迹信息查询)基于新SearchIndex功能Query:search接口。用户可以自由设计索引字段的多维度条件组合查询。通过设置选择不同的查询参数,构建不同的查询条件、不同排序方式;目前支持:精确查询、范围查询、前缀查询、匹配查询、通配符查询、短语匹配查询、分词字符串查询,并通过布尔与、或组合。如【2018年11月01日,id00001号摩托车,行驶轨迹及违章查询】Query条件如下:List<Query> mustQueries = new ArrayList<Query>();List<String> polygonList = Arrays.asList(//地理围栏,禁摩区域 “30.262348,120.092127”, “30.311668,120.079761”, “30.332413,120.129371”, …);String mId = “id00001”;Long timeStart = [2018-11-01时间戳];Long timeEnd = [2018-11-02时间戳];GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();geoPolygonQuery.setPoints(polygonList);geoPolygonQuery.setFieldName(“pos”);mustQueries.add(geoPolygonQuery);TermQuery termQuery = new TermQuery();termQuery.setFieldName(“mId”);termQuery.setTerm(ColumnValue.fromString(request.getmId()));mustQueries.add(termQuery);RangeQuery rangeQuery = new RangeQuery();rangeQuery.setFieldName(“timestamp”);rangeQuery.setFrom(ColumnValue.fromDouble(timeStart, true);rangeQuery.setTo(ColumnValue.fromDouble(timeEnd, false);mustQueries.add(rangeQuery);BoolQuery boolQuery = new BoolQuery();boolQuery.setMustQueries(mustQueries);这样,系统的核心代码已经完成,基于表格存储搭亿量级“摩托车管理系统”,是不是很简单?本文作者:潭潭阅读原文本文为云栖社区原创内容,未经允许不得转载。

November 15, 2018 · 1 min · jiezi