精华内容
下载资源
问答
  • Table API是用于流和批处理的统一关系API。 Table API查询可以在批量或流式输入上运行而... Table API查询不是像SQL一样将字符串值指定SQL,而是在Java或Scala中以嵌入语言的样式定义,并支持自动完成和语法验证等...

    分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!

    点击浏览教程


    Table API是用于流和批处理的统一关系API。 Table API查询可以在批量或流式输入上运行而无需修改。 Table API是SQL语言的超级集合,专门用于与Apache Flink一起使用。 Table API是Scala和Java语言集成API。 Table API查询不是像SQL一样将字符串值指定为SQL,而是在Java或Scala中以嵌入语言的样式定义,并支持自动完成和语法验证等IDE支持。

    代码

    这里先上完整代码。

    需要的pom依赖:

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-scala_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-scala_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kafka-0.8 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka-0.8_2.11</artifactId>
        <version>${flink.version}</version>
    </dependency>
    

    从kafka消费数据,转换为table,然后进行sql查询。
    用scala开发,需要导入的包,不要漏掉,否则会有问题。

    import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
    import org.apache.flink.streaming.api.scala._
    import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer08
    import org.apache.flink.streaming.util.serialization.SimpleStringSchema
    import org.apache.flink.table.api.TableEnvironment
    import org.apache.flink.table.api.scala._
    

    下面是完整代码:

    package com.ddxygq.bigdata.flink.sql
    
    import java.util.Properties
    
    import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
    import org.apache.flink.streaming.api.scala._
    import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer08
    import org.apache.flink.streaming.util.serialization.SimpleStringSchema
    import org.apache.flink.table.api.TableEnvironment
    import org.apache.flink.table.api.scala._
    
    /**
      * @ Author: keguang
      * @ Date: 2019/2/22 16:13
      * @ version: v1.0.0
      * @ description: 
      */
    object TableDemo {
      def main(args: Array[String]): Unit = {
        demo
    
      }
    
      def demo2(): Unit ={
        val env = ExecutionEnvironment.getExecutionEnvironment
        val tEnv = TableEnvironment.getTableEnvironment(env)
    
        val input:DataSet[WC] = env.fromElements(WC("hello", 1), WC("hello", 1), WC("ciao", 1))
        val input2:DataSet[WC] = env.fromElements(WC("hello", 1), WC("hello", 1))
        val table = input.toTable(tEnv, 'word, 'frequency)
        val table2 = input2.toTable(tEnv, 'word2, 'frequency2)
        val result = table.join(table2).where('word == 'word2).select('word, 'frequency)
        result.toDataSet[(String, Long)].print()
    
      }
    
      def demo: Unit ={
        val sEnv = StreamExecutionEnvironment.getExecutionEnvironment
        val sTableEnv = TableEnvironment.getTableEnvironment(sEnv)
    
        // 连接kafka
        val ZOOKEEPER_HOST = "qcloud-test-hadoop01:2181"
        val KAFKA_BROKERS = "qcloud-test-hadoop01:9092,qcloud-test-hadoop02:9092,qcloud-test-hadoop03:9092"
        val TRANSACTION_GROUP = "transaction"
        val kafkaProps = new Properties()
        kafkaProps.setProperty("zookeeper.connect",ZOOKEEPER_HOST)
        kafkaProps.setProperty("bootstrap.servers", KAFKA_BROKERS)
        kafkaProps.setProperty("group.id",TRANSACTION_GROUP)
        val input = sEnv.addSource(
          new FlinkKafkaConsumer08[String]("flink-test", new SimpleStringSchema(), kafkaProps)
        )
          .flatMap(x => x.split(" "))
          .map(x => (x, 1L))
    
        val table = sTableEnv.registerDataStream("Words", input, 'word, 'frequency)
    
        val result = sTableEnv
          .scan("Words")
          .groupBy("word")
          .select('word, 'frequency.sum as 'cnt)
        sTableEnv.toRetractStream[(String, Long)](result).print()
    
        sTableEnv.sqlQuery("select * from Words").toAppendStream[(String, Long)].print()
    
        sEnv.execute("TableDemo")
      }
    }
    

    这里有两个地方:
    1、这里举例用了table的算子,和标准的sql查询语法,为了演示table的基本用法。

    val result = sTableEnv
          .scan("Words")
          .groupBy("word")
          .select('word, 'frequency.sum as 'cnt)
    

    这个分组聚合统计其实可以替换成:

    val result  = sTableEnv.sqlQuery("select word,sum(frequency) as cnt from Words group by word")
    
    // 打印到控制台
    sTableEnv.toRetractStream[(String, Long)](result).print()
    

    那么这个与下面的查询结果有什么区别呢?

    sTableEnv.sqlQuery("select * from Words").toAppendStream[(String, Long)].print()
    

    区别很明显,这里消费kafka的实时数据,那么Words表是一个动态的流表,数据在不断append,一个是group by的分组聚合,结果需要不断更新,比如当前是(hello,4),这时候又来了一个词语hello,就需要update结果为(hello,5),如果有新词,还需要insert,而后者是select * from Words,只是追加结果。

    所以,这里只是展示打印到控制台的写法不同,前者调用的是toRetractStream方法,而后者是调用toAppendStream

    将表转换为DataStream或DataSet

    将表转换为DataStream

    将a转换Table为a 有两种模式DataStream:

    • 追加模式(toAppendStream):只有在动态Table仅通过INSERT更改修改时才能使用此模式,即它仅附加并且以前发出的结果永远不会更新。
    • 缩进模式(toRetractStream):始终可以使用此模式。它用标志编码INSERT和DELETE改变boolean。
    / get TableEnvironment.
    // registration of a DataSet is equivalent
    val tableEnv = TableEnvironment.getTableEnvironment(env)
    
    // Table with two fields (String name, Integer age)
    val table: Table = ...
    
    // convert the Table into an append DataStream of Row
    val dsRow: DataStream[Row] = tableEnv.toAppendStream[Row](table)
    
    // convert the Table into an append DataStream of Tuple2[String, Int]
    val dsTuple: DataStream[(String, Int)] dsTuple =
      tableEnv.toAppendStream[(String, Int)](table)
    
    // convert the Table into a retract DataStream of Row.
    //   A retract stream of type X is a DataStream[(Boolean, X)].
    //   The boolean field indicates the type of the change.
    //   True is INSERT, false is DELETE.
    val retractStream: DataStream[(Boolean, Row)] = tableEnv.toRetractStream[Row](table)
    

    将表转换为DataSet

    // get TableEnvironment
    // registration of a DataSet is equivalent
    val tableEnv = TableEnvironment.getTableEnvironment(env)
    
    // Table with two fields (String name, Integer age)
    val table: Table = ...
    
    // convert the Table into a DataSet of Row
    val dsRow: DataSet[Row] = tableEnv.toDataSet[Row](table)
    
    // convert the Table into a DataSet of Tuple2[String, Int]
    val dsTuple: DataSet[(String, Int)] = tableEnv.toDataSet[(String, Int)](table)
    

    我的个人博客


    在这里插入图片描述

    展开全文
  • 隐式数据类型转换 & TABLE ACCESS FULL

    千次阅读 2011-03-21 10:19:00
    最近一个新功能上线后,发现某个SQL本应该走索引,但实际走了全表扫描。   罪魁祸首是:隐式... SQL> create table t (object_id varchar2(10) ); 表已创建。 SQL> insert into t (s

    最近一个新功能上线后,发现某个SQL本应该走索引,但实际走了全表扫描。

     

    罪魁祸首是:隐式类型转换。虽然这个问题已经强调过很多次了,但难免还会有漏网之鱼。

     

     

    下面模拟一下跟踪过程:
    SQL> drop table t purge;
    表已删除。

    SQL> create table t (object_id varchar2(10) );
    表已创建。

    SQL> insert into t (select object_id from dba_objects);
    已创建72668行。

    SQL> create index idx_obj on t(object_id );
    索引已创建。


    SQL> analyze table t compute statistics;

    表已分析。

    SQL> set autotrace on;
    SQL> set timing on;

     

    object_id是varchar2类型,但where条件中传入的值2052是number类型,这将导致oracle使用隐式类型转换。

     

    在执行计划中 filter(TO_NUMBER("OBJECT_ID")=2052)证明了oracle使用了隐式类型转换。

    从而导致该SQL不能使用索引,而使用了全表扫描TABLE ACCESS FULL


    SQL> SELECT COUNT(1) FROM  t WHERE  object_id=2052;

      COUNT(1)
    ----------
             1

    已用时间:  00: 00: 00.04

    执行计划
    ----------------------------------------------------------
    Plan hash value: 2966233522

    ---------------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |     1 |     5 |    35   (3)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |      |     1 |     5 |            |          |
    |*  2 |   TABLE ACCESS FULL| T    |     1 |     5 |    35   (3)| 00:00:01 |
    ---------------------------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------
       2 - filter(TO_NUMBER("OBJECT_ID")=2052)


    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
            122  consistent gets
              0  physical reads
              0  redo size
            430  bytes sent via SQL*Net to client
            420  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed

     

     

    传入正确的数据类型后object_id='2052',发现该表走了索引INDEX RANGE SCAN


    SQL> SELECT COUNT(1) FROM  t WHERE  object_id='2052';
      COUNT(1)
    ----------
             1
    已用时间:  00: 00: 00.03

    执行计划
    ----------------------------------------------------------
    Plan hash value: 3925777440

    -----------------------------------------------------------------------------
    | Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |         |     1 |     5 |     1   (0)| 00:00:01 |
    |   1 |  SORT AGGREGATE   |         |     1 |     5 |            |          |
    |*  2 |   INDEX RANGE SCAN| IDX_OBJ |     1 |     5 |     1   (0)| 00:00:01 |
    -----------------------------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       2 - access("OBJECT_ID"='2052')


    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              2  consistent gets
              0  physical reads
              0  redo size
            430  bytes sent via SQL*Net to client
            420  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed

    展开全文
  • 文章目录DataStream或DataSet 转换为TableDataStream注册成Table通过registerDataStream转换table使用fromDataStream转换tableDataSet转换TableTable转换成DataStream或DataSetTable转换为DataStreamTable转换...


    table api是DataStream或DataSet更高一层的抽象

    DataStream或DataSet 转换为Table

    目前有两种方式将DataStream或DataSet 转换为Table
    一种是通过注册Table的方式,将DataSet或DataStream数据集注册成CataLog中的表,然后可以直接使用Flink SQL操作注册好的Table,这种方式需要指定表名和包含的字段名称,Flink会自动推断出Table中的字段类型
    一种是转换的方式,将DataSet或DataStream数据集转换成Table结构,然后可以使用Table API操作创建好的Table

    DataStream注册成Table

    通过registerDataStream转换成table

    注意表名需要唯一

        val env = StreamExecutionEnvironment.getExecutionEnvironment
        val tabEnv = StreamTableEnvironment.create(env)
        import org.apache.flink.api.scala._ //需要隐式转换
        val stream = env.fromElements((192,"f1"),(110,"f2"))
        //注册成表table01,并且默认字段为f1和f2
        tabEnv.registerDataStream("table01",stream)
        //注册成table-2,字段名为field1以及field2
        tabEnv.registerDataStream("table02",stream,'field01,'field02)
    
    使用fromDataStream转换成table

    字段名称需要指定,字段类型flink自动推断,转换完成后可以使用TableAPI操作创建好的Table

       val table1 = tabEnv.fromDataStream(stream)
       val table2 = tabEnv.fromDataStream(stream,'fd1,'fd2)
    

    DataSet转换成Table

    雷同只是更改了registerDataSet

    import org.apache.flink.api.scala._
    import org.apache.flink.table.api._
    import org.apache.flink.table.api.scala._
    
    object DataSet2Table {
      def main(args: Array[String]): Unit = {
        //需要隐式转换
        val env = ExecutionEnvironment.getExecutionEnvironment
        val tEnv = BatchTableEnvironment.create(env)
    
        val dataSet = env.fromElements((192,"f1"),(110,"f2"))
        //注册成表tab01,并且默认字段为f1和f2
        tEnv.registerDataSet("tab01",dataSet)
        //注册成table-2,字段名为f1以及f2
        tEnv.registerDataSet("tab01",dataSet,'f1,'f2)
      }
    }
    
    

    fromDataSet

    //指定字段f1,f2
     val table1 = tEnv.fromDataSet(dataSet,'f1,'f2)
     //未指定字段 默认f0,f1
     val table2 = tEnv.fromDataSet(dataSet)
    

    Table转换成DataStream或DataSet

    Table转换为DataStream或DataSet数据集,需要在转换过程指明目标数据集的字段类型,Flink目前支持从Table中转换Row,POJO,Case Class,Tuple,Atomic Type等数据类型,Row对象类型最简单,无需定义任何数据结构

    Table转换为DataStream

    在流式计算过程中数据不断的动态更新,将Table转换成DataStream需要指定数据输出的模式,目前Flink支持Append Model 和 Retract Model
    Append Model

    采用追加方式只将Insert 更新变化的数据写入DataStream中

    import org.apache.flink.types.Row
    
    object Table2Stream {
      def main(args: Array[String]): Unit = {
        val env = StreamExecutionEnvironment.getExecutionEnvironment
        val tabEnv = StreamTableEnvironment.create(env)
        import org.apache.flink.api.scala._ //需要隐式转换
        val stream = env.fromElements((192, "f1"), (110, "f2"))
    
        val table = tabEnv.fromDataStream(stream)
        //未知类型转换为Row
        val dsRow: DataStream[Row] = tabEnv.toAppendStream[Row](table)
        //对于类型已知,可以指定Tuple中格式
        val dsRow2: DataStream[(Long, String)] = tabEnv.toAppendStream[(Long, String)](table)
       env.execute()
    
      }
    }
    
    

    Retract Model

    数据会根据一个Boolean标记当前是Insert操作还是Delete 操作更新的数据,实际应用中比较常见
    返回的数据类型中Tuple中第一个元祖True为INSET 操作,False 为DELETE 操作更新的数据

    val retractStream = tabEnv.toRetractStream[Row](table)
    

    Table转换为DataSet

    由于数据为静态数据集,可以直接调用toDataSet方法转换,可以使用Row或自定义数据类型,但是要与Table中数据结构类型一致

    import org.apache.flink.api.scala._
    import org.apache.flink.table.api.scala._
    import org.apache.flink.types.Row
    
    object Table2DataSet {
      def main(args: Array[String]): Unit = {
        //需要隐式转换
        val env = ExecutionEnvironment.getExecutionEnvironment
        val tEnv = BatchTableEnvironment.create(env)
        val dataSet = env.fromElements((192, "f1"), (110, "f2"))
        val table = tEnv.fromDataSet(dataSet)
        tEnv.toDataSet[Row](table).print()
        env.execute()
      }
    }
    
    
    展开全文
  • sqlserver 2012 扩展事件将XML转换为table格式
    CREATE EVENT SESSION [test] ON SERVER 
    ADD EVENT sqlserver.sql_statement_completed
    (SET collect_statement=(1)
      ACTION
      (
      sqlserver.client_app_name,
      sqlserver.client_hostname,
      sqlserver.database_id,
      sqlserver.database_name,
      sqlserver.sql_text,sqlserver.username
      )
        WHERE ([cpu_time]>(10000))
      ) 
    ADD TARGET package0.asynchronous_file_target
    (
       SET filename='s:\monitor\test.xel', 
       metadatafile='s:\monitor\test.xem'
       )
    WITH 
    (
    MAX_MEMORY=1048576 KB,
    STARTUP_STATE=ON
    )
    GO
    
    
    
    --SELECT *, CAST(event_data as XML) AS 'event_data_XML'
    --FROM sys.fn_xe_file_target_read_file
    --(
    --'s:\monitor\test*.xel',
    -- 's:\monitor\test*.xem', NULL, NULL
    -- );
    
    IF EXISTS ( SELECT  *
                FROM    tempdb.dbo.sysobjects
                WHERE   id = OBJECT_ID(N'tempdb..#MyData')
                        AND type = 'U' ) 
        DROP TABLE #MyData
    go
    
    CREATE TABLE #MyData
        (
          database_id INT NOT NULL ,
          username NVARCHAR(100) NOT NULL,
          client_hostname NVARCHAR(100) NOT NULL,
    	  client_app_name NVARCHAR(100) NOT NULL,
          sql_text NVARCHAR(MAX) NOT NULL ,
          cpu_time INT NOT NULL
        )
    go
    
    
    DECLARE @xmlData XML
    DECLARE @xmlString NVARCHAR(MAX)
    DECLARE @database_id INT
    DECLARE @username NVARCHAR(100)
    DECLARE @client_hostname NVARCHAR(100)
    DECLARE @client_app_name NVARCHAR(100) 
    DECLARE @sql_text NVARCHAR(MAX)
    DECLARE @cpu_time INT
    
    DECLARE myCur CURSOR READ_ONLY
    FOR
    SELECT TOP 200 event_data --CAST(event_data AS XML)
    FROM sys.fn_xe_file_target_read_file
    
    ('s:\monitor\test*.xel',
     's:\monitor\test*.xem',NULL,NULL) 
    
    OPEN myCur
    
    FETCH NEXT FROM myCur INTO @xmlString
    
    WHILE @@FETCH_STATUS = 0 
    
    BEGIN
    		 BEGIN TRY
    		    SET @xmlData = CAST(@xmlString AS XML)
    		    --set @cpu = 0
    		    --获取cpu														  
    			SET @cpu_time = @xmlData.query('//data[@name="cpu_time"]/value').value('(value)[1]',
    																  'INT')
    				    
    		    --获取database_id
    			SET @database_id = @xmlData.query('//action[@name="database_id"]/value').value('(value)[1]',
    																  'INT')
    			--获取username												  
                SET @username = @xmlData.query('//action[@name="username"]/value').value('(value)[1]',
    																  'NVARCHAR(100)')
    			--获取hostname												  
                SET @client_hostname = @xmlData.query('//action[@name="client_hostname"]/value').value('(value)[1]',
    																  'NVARCHAR(100)')
    
    			--获取client_app_name												  
                SET @client_app_name = @xmlData.query('//action[@name="client_app_name"]/value').value('(value)[1]',
    																  'NVARCHAR(100)')
    																  
    			--获取sql_text
    			SET @sql_text = @xmlData.query('//action[@name="sql_text"]/value').value('(value)[1]',
    														  'NVARCHAR(MAX)')
    			
    
    			--开始插入数据
    			INSERT #MyData
    					( database_id, 
    					 sql_text, 
    					 username,
    					  client_hostname,
    					  client_app_name,
    					  cpu_time )
    			VALUES  ( @database_id, -- database_id - int
    					  @sql_text,  -- sql_text - nvarchar(max)
    					  @username,
    					  @client_hostname,
    					  @client_app_name,
    					  @cpu_time
    					  )
    		 END TRY
    		 BEGIN CATCH
    		 END CATCH
    		
    		
            FETCH NEXT FROM myCur INTO @xmlString
    END
    CLOSE myCur
    DEALLOCATE myCur
    
    
    
    SELECT b.name,a.username,a.client_hostname,A.client_app_name,a.sql_text,a.cpu_time FROM #MyData AS a
    inner join sys.databases as b
    on a.database_id=b.database_id
    order by a.cpu_time desc
    go
    
    
    

    展开全文
  • sqlserver扩展事件,结果集是XML不便于阅读,将其转换为table格式便于阅读和排序.
  • react table column日期转换

    千次阅读 2019-03-08 09:42:16
    首先定义一个日期转换组件,我这就随便找了一个,大体如下: 这里我引用一位大佬造好的轮子,出处:https://blog.csdn.net/weixin_39466493/article/details/79565773 class DateAPI { /** * 将输入的毫秒字符串...
  • create table Users ( UserId int identity(1,1) primary key, UserName varchar(20) ) insert into Users values('Bradley') insert into Users values('Dan')   2. 创建JsonHelper类 public cla
  • object 与xml的转换读取

    千次阅读 2015-03-05 17:15:15
    1.object ====> xml XmlDocument doc = new XmlDocument();  XmlElement Root = doc.CreateElement("Table"); //主内容  doc.AppendChild(Root); List eleColName=new List(); List eleValue=new List(); //
  • 踩坑 TypeError: Cannot convert object to primitive value 翻译结果:类型错误:不能将对象转换为原始值 问题所在:在代码中将对象与基本类型做比较导致 if( object != '' ) //对象与字符串比较 报错
  • 1.了解document.execCommand()===== execCommand方法是执行一个...AbsolutePosition 设定元素的 position 属性“absolute”(绝对)。 BackColor 设置或获取当前选中区的背景颜色。 BlockDirLTR 目前尚未支持。 Bloc
  • JSON 与 LUA Table 相互转换

    千次阅读 2017-09-06 14:50:11
    注: 本代码并非我原创,我只是在原有基础上进行修改 先贴代码 原本的代码是从网上随便找的,但是在实际用了...2.lua table = {nil,nil,nil,nil,5} 转成json再解析 会变成 table = {5} 造成key值不对应 以下
  • ORACLE 自定义类型 type/ object 2017年03月28日 13:58:23 tan1012194073 阅读数:5999 版权声明:本文博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tan1012194073/article/details/67635107 ...
  • /// Convert object collection to an data table /// /// <param name="list"></param> /// <returns></returns> public static DataTable GenericListToDataTable(object list) { DataTable dt = ...
  • Warning: Failed prop type: Invalid prop `dataSource` of type `object` supplied to `Table`, expected `array`. 问题点: 传给Table组建dataSource={}属性的值的格式存在异常,dataSource={}属性只能传...
  • 把DataTable自动转换Object对象集

    千次阅读 2007-12-22 21:53:00
    接下来添加一个MyInclude类,类里添加一个静态方法GetObject方法,用于从DataTable中自动取得对象,在这里我返回的是范型(System.Collections.Generic.List)的Object,之后可以自由转换成各类实例对象。代码如下: ...
  • /** * 数组 转 对象 * * @param array $arr 数组 * @return object */ function array_to_object($arr) { if (gettype($arr) != 'array') { return; } foreach ($arr as $k =&amp;amp;gt; $v) { i...
  • 将JSONObject转换为对象时,发现转换后的对象空,代码如下 @Getter @Setter @Entity @Table(name = "image") @Accessors(chain = true) public class MqHouseImage { @Id @Column(name = "id") private ...
  • 在实际开发中,有时候需要对数据表进行行列转换转换之后再显示对应的数据,行列转换的方法比较多,本次介绍静态的利用聚合函数来实现,行转列测试数据:--测试数据 if not object_id(N'Tempdb..#T') is null drop...
  • 在ADO.NET中,从数据库中获得的数据可以保存在DataTable中,当然这个DataTable可以是强类型的。...其实在LINQ To SQL中,用了一些attribute来辅助.net将一个数据库中的table转换为一个Object,这些attribute位于S
  • 上篇博客介绍了静态方式的行列转换,这次介绍一下利用SQL SERVER 函数实现的行列转换,行转列测试数据同之前的一样:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T(...
  • list转换为dataTable

    2011-09-15 17:48:54
    list转换为dataTable,list转换为dataTable
  • 这是一个简单的脚本,可以以最简单,最快的方式将JSON数据转换为标准HTML表。 如何使用 该库中只有一个函数,并且接受四个参数,而第一个参数是必需的。 function ConvertJsonToTable ( parsedJson , tableId , ...
  • 行列转换/矩阵转换

    千次阅读 2006-12-11 22:32:00
    1、纵转换为横。有表:test(name char(10),km char(10),cj int)name km cj----------------------------------------------张三 语文 80张三 数学 86张三 英语 75李四 语文 78李四 数学 85李四 英语 ...
  • FeatureClass转换为DataTable

    千次阅读 2016-05-09 14:56:08
    IFeatureClass ITable DataTable 获取工作空间加的所有的FeatureClass或者Table,然后转换为Datable
  • 注 : 2019-06-16日 增加第...注意:这个方法转换时我这边老是报类型转换错误,引用这段代码没有报错的小伙伴可继续使用,此方法扩展性好,报错的小伙伴请看最下面的一个map转实体类对象方法; //1.通过map构造permiss...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,913
精华内容 61,965
关键字:

object转换为table