• 关于 时间转换成时间戳 的搜索结果

问题

如何使用 SimpleDateFormat 类的 format() 方法将时间戳转换成时间

珍宝珠 2020-02-12 19:45:00 2 浏览量 回答数 1

回答

首先你要理解什么是时间戳。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至某一时间点的总秒数。例如北京时间2015-12-31 17:00:00的时间戳是1451552400,就是指从北京时间1970-01-01 08:00:00到2015-12-31 17:00:00已经过去了1451552400秒。网上有在线的时间戳转换工具:http://tool.chinaz.com/Tools/unixtime.aspx下面一一问答你的问题:1、MySQL数据库的timestamp为什么从1970到2038的某一时间?MySQL的timestamp类型是4个字节,最大值是2的31次方减1,也就是2147483647,转换成北京时间就是2038-01-19 11:14:07。可以使用上面的在线的时间戳转换工具得出。2、某一时间是指什么时间?如上,北京时间是2038-01-19 11:14:07。3、过了这个时间之后怎么办?1) 使用datetime;2) 等过了再说。最后补充一个彩蛋:北京时间2038-01-19 11:14:07,如果某些系统还在使用MySQL的Timestamp,或者系统使用的编程语言用4字节补码整型(例如Java的int)来表示时间戳的,这些系统都会跪掉,说不定会搞出点什么大新闻(例如飞机航班系统挂掉、银行某系统跪掉),好吧,我乱猜的,等着那一天吧。

a123456678 2019-12-02 02:58:13 0 浏览量 回答数 0

问题

iOS时间转时间戳

a123456678 2019-12-01 19:22:50 1262 浏览量 回答数 2

试用中心

为您提供0门槛上云实践机会,企业用户最高免费12个月

回答

Integer放不下时间戳,改成Long即可 引用来自“夜丶魂”的评论 Integer放不下时间戳,改成Long即可 这个timestamp?我说的不是时间戳类型转换 建议把实体类贴出来,不然数据类型都看不到,异常描述的很清楚,类型转换错误回复 @夜丶魂:你看吧回复 @hiyou:Role实体类的代码贴出来你能不能仔细看看 看不出什么异常Function和Admin都看不到,把代码剥离出来,直接用fastjson把你那段json转换成Role测试下回复 @hiyou:不用谢,毕竟没有帮到你恩,谢谢指点

爱吃鱼的程序员 2020-06-08 14:59:01 0 浏览量 回答数 0

问题

qiuckBI 数据集中时间戳字段数据类型为int,如何转换日期?

tashan_ 2019-12-01 20:24:52 957 浏览量 回答数 0

问题

MySQL时间溢出处理。

落地花开啦 2019-12-01 19:59:43 1106 浏览量 回答数 1

回答

转换成时间戳比较

1145868137202299 2019-12-02 02:12:53 0 浏览量 回答数 0

回答

转换成时间戳再比较

harger666 2019-12-02 02:07:41 0 浏览量 回答数 0

问题

javascript算法题

a123456678 2019-12-01 20:20:52 820 浏览量 回答数 1

问题

数加平台使用疑惑

mangolzy 2019-12-01 21:13:40 2847 浏览量 回答数 2

回答

Re数加平台使用疑惑 意思是在pai平台上 面总体跟以前的御膳房很像的,但现在只看到sql脚本,连r都找不着了,有些数据处理感觉单用sql不够吧?? 引用楼主mangolzy于2016-06-19 15:10发表的 数加平台使用疑惑 : 比如,需要将时间戳类型转换成date? 还有哦,pai平台 和 ide shuju平台有何不同啊?? ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=285686&pid=tpc][/url]

mangolzy 2019-12-02 01:54:31 0 浏览量 回答数 0

回答

日期和时间模式(注意大小写,代表的含义是不同的): yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期(会把这个月总共过的天数除以7) w:一年中的第几个星期 W:一月中的第几星期(会根据实际情况来算) a:上下午标识 k:和HH差不多,表示一天24小时制(1-24) K:和hh差不多,表示一天12小时制(0-11) z:表示时区 import java.text.SimpleDateFormat; import java.util.Date; public class Main{ public static void main(String[] args){ Long timeStamp = System.currentTimeMillis(); //获取当前时间戳 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sd = sdf.format(new Date(Long.parseLong(String.valueOf(timeStamp)))); // 时间戳转换成时间 System.out.println("格式化结果:" + sd); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒"); String sd2 = sdf2.format(new Date(Long.parseLong(String.valueOf(timeStamp)))); System.out.println("格式化结果:" + sd2); } } 以上代码运行输出结果为: 格式化结果:2018-07-10 12:17:34 格式化结果:2018 年 07 月 10 日 12 时 17 分 34 秒

珍宝珠 2020-02-12 19:46:03 0 浏览量 回答数 0

回答

<p>改成:</p> print (b.timestamp()-a.timestamp()) 测试代码: import time import datetime a=datetime.datetime.now() time.sleep(5) b=datetime.datetime.now() print (b.timestamp()-a.timestamp()) 输出: D:\python>python time2.py 5.000286102294922 <p>将你的时间换算成时间戳就可以计算了, </p> <p>谢谢各位的热心解答,我用的是python3.6.4版本,a和的类型都是<class 'datetime.time'>,这个类型没有timestamp()方法,datetime.datetime.now()获取到的时间类型是<class 'datetime.datetime'>。谢谢各位热心回答,我决定吧数据库导出的格式由<class 'datetime.time'>变更为<class 'datetime.datetime'>类型了,就支持,加减操作了。谢谢热心网友回答</p> <p>先别变更数据库导出的格式,看看:<a rel="nofollow">python中怎么把datetime类型转换成timestamp</a> 可能对你有用。这个帖子是前两个多月才发出的:推荐于2018-03-08 16:16:05</p> 那里用的是 python3.6.4。

爱吃鱼的程序员 2020-06-06 21:27:57 0 浏览量 回答数 0

问题

在apache flink中拆分和加入流

flink小助手 2019-12-01 19:22:00 683 浏览量 回答数 1

回答

详细解答可以参考官方帮助文档 基本数据类型 MaxCompute2.0支持的基本数据类型如下表所示,新增类型有TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP和BINARY,MaxCompute表中的列必须是下列描述的任意一种类型,详情如下: 说明 SQL(Create、select、insert等操作)中涉及到新数据类型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 涉及INT类型,加上述set语句的时候是32位,不加的时候会被转换成BIGINT,是64位。 MR类型任务目前暂时不支持操作新数据类型。 类型 是否新增 常量定义 描述 TINYINT 是 1Y,-127Y 8 位有符号整形,范围 -128 到 127 SMALLINT 是 32767S, -100S 16 位有符号整形, 范围 -32768 到 32767 INT 是 1000,-15645787(注释1) 32位有符号整形,范围-231到231 - 1 BIGINT 否 100000000000L, -1L 64位有符号整形, 范围-263 + 1到263 - 1 FLOAT 是 无 32位二进制浮点型 DOUBLE 否 3.1415926 1E+7 64位二进制浮点型 DECIMAL 否 3.5BD, 99999999999.9999999BD 10 进制精确数字类型,整形部分范围-10^36+1到10^36-1, 小数部分精确到 10^(-18) VARCHAR 是 无 ( 注释2 ) 变长字符类型,n为长度,取值范围 1 到 65535 STRING 否 “abc”,’bcd’,”alibaba” ‘inc’ ( 注释3 ) 字符串类型,目前长度限制为 8M BINARY 是 无 二进制数据类型,目前长度限制为 8M DATETIME 否 DATETIME ‘2017-11-11 00:00:00’ 日期时间类型,范围从0000年1月1日到9999年12月31日,精确到毫秒(注释4) TIMESTAMP 是 TIMESTAMP ‘2017-11-11 00:00:00.123456789’ 与时区无关的时间戳类型,范围从0000年1月1日到9999年12月31日 23.59:59.999999999, 精确到纳秒 BOOLEAN 否 TRUE,FALSE boolean 类型, 取值 TRUE 或 FALSE 上述的各种数据类型均可为NULL。 说明 注释1:对于INT常量,如果超过INT取值范围,会转为BIGINT。如果超过BIGINT取值范围,会转为DOUBLE。 在旧版MaxCompute中,因为历史原因,SQL脚本中的所有INT类型都被转换为BIGINT,如下所示: create table a_bigint_table(a int); -- 这里的int实际当作bigint处理 select cast(id as int) from mytable; -- 这里的int实际当作bigint处理 为了与MaxCompute原有模式兼容,MaxCompute2.0在未设定odps.sql.type.system.odps2为true的情况下,仍保留此转换,但会报告一个警告,提示INT被当作BIGINT处理了,如果您的脚本有此种情况,建议全部改写为BIGINT,避免混淆。 注释2:VARCHAR类型常量可通过STRING常量的隐式转换表示。 注释3:STRING常量支持连接,例如abc xyz会解析为abcxyz,不同部分可以写在不同行上。 注释4:目前查询显示的时间值不包含毫秒。Tunnel 命令通过-dfp 来指定时间格式,可以指定到毫秒显示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS' ,关于Tunnel命令的更多信息,请参考Tunnel命令操作。 MaxCompute2.0支持的复杂类型如下表所示。 说明 SQL( create、select、insert等操作)中涉及到这几个复杂数据类型,需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 类型 定义方法 构造方法 ARRAY array< int >;array< struct< a:int, b:string >> array(1, 2, 3); array(array(1, 2); array(3, 4)) MAP map< string, string >;map< smallint, array< string>> map(“k1”, “v1”, “k2”, “v2”);map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y)) STRUCT struct< x:int, y:int>;struct< field1:bigint, field2:array< int>, field3:map< int, int>> named_struct(‘x’, 1, ‘y’, 2);named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200)

2019-12-01 23:10:56 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 基本数据类型 MaxCompute2.0支持的基本数据类型如下表所示,新增类型有TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP和BINARY,MaxCompute表中的列必须是下列描述的任意一种类型,详情如下: 说明 SQL(Create、select、insert等操作)中涉及到新数据类型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 涉及INT类型,加上述set语句的时候是32位,不加的时候会被转换成BIGINT,是64位。 MR类型任务目前暂时不支持操作新数据类型。 类型 是否新增 常量定义 描述 TINYINT 是 1Y,-127Y 8 位有符号整形,范围 -128 到 127 SMALLINT 是 32767S, -100S 16 位有符号整形, 范围 -32768 到 32767 INT 是 1000,-15645787(注释1) 32位有符号整形,范围-231到231 - 1 BIGINT 否 100000000000L, -1L 64位有符号整形, 范围-263 + 1到263 - 1 FLOAT 是 无 32位二进制浮点型 DOUBLE 否 3.1415926 1E+7 64位二进制浮点型 DECIMAL 否 3.5BD, 99999999999.9999999BD 10 进制精确数字类型,整形部分范围-10^36+1到10^36-1, 小数部分精确到 10^(-18) VARCHAR 是 无 ( 注释2 ) 变长字符类型,n为长度,取值范围 1 到 65535 STRING 否 “abc”,’bcd’,”alibaba” ‘inc’ ( 注释3 ) 字符串类型,目前长度限制为 8M BINARY 是 无 二进制数据类型,目前长度限制为 8M DATETIME 否 DATETIME ‘2017-11-11 00:00:00’ 日期时间类型,范围从0000年1月1日到9999年12月31日,精确到毫秒(注释4) TIMESTAMP 是 TIMESTAMP ‘2017-11-11 00:00:00.123456789’ 与时区无关的时间戳类型,范围从0000年1月1日到9999年12月31日 23.59:59.999999999, 精确到纳秒 BOOLEAN 否 TRUE,FALSE boolean 类型, 取值 TRUE 或 FALSE 上述的各种数据类型均可为NULL。 说明 注释1:对于INT常量,如果超过INT取值范围,会转为BIGINT。如果超过BIGINT取值范围,会转为DOUBLE。 在旧版MaxCompute中,因为历史原因,SQL脚本中的所有INT类型都被转换为BIGINT,如下所示: create table a_bigint_table(a int); -- 这里的int实际当作bigint处理 select cast(id as int) from mytable; -- 这里的int实际当作bigint处理 为了与MaxCompute原有模式兼容,MaxCompute2.0在未设定odps.sql.type.system.odps2为true的情况下,仍保留此转换,但会报告一个警告,提示INT被当作BIGINT处理了,如果您的脚本有此种情况,建议全部改写为BIGINT,避免混淆。 注释2:VARCHAR类型常量可通过STRING常量的隐式转换表示。 注释3:STRING常量支持连接,例如abc xyz会解析为abcxyz,不同部分可以写在不同行上。 注释4:目前查询显示的时间值不包含毫秒。Tunnel 命令通过-dfp 来指定时间格式,可以指定到毫秒显示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS' ,关于Tunnel命令的更多信息,请参考Tunnel命令操作。 MaxCompute2.0支持的复杂类型如下表所示。 说明 SQL( create、select、insert等操作)中涉及到这几个复杂数据类型,需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 类型 定义方法 构造方法 ARRAY array< int >;array< struct< a:int, b:string >> array(1, 2, 3); array(array(1, 2); array(3, 4)) MAP map< string, string >;map< smallint, array< string>> map(“k1”, “v1”, “k2”, “v2”);map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y)) STRUCT struct< x:int, y:int>;struct< field1:bigint, field2:array< int>, field3:map< int, int>> named_struct(‘x’, 1, ‘y’, 2);named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200)

2019-12-01 23:10:56 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 基本数据类型 MaxCompute2.0支持的基本数据类型如下表所示,新增类型有TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP和BINARY,MaxCompute表中的列必须是下列描述的任意一种类型,详情如下: 说明 SQL(Create、select、insert等操作)中涉及到新数据类型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 涉及INT类型,加上述set语句的时候是32位,不加的时候会被转换成BIGINT,是64位。 MR类型任务目前暂时不支持操作新数据类型。 类型 是否新增 常量定义 描述 TINYINT 是 1Y,-127Y 8 位有符号整形,范围 -128 到 127 SMALLINT 是 32767S, -100S 16 位有符号整形, 范围 -32768 到 32767 INT 是 1000,-15645787(注释1) 32位有符号整形,范围-231到231 - 1 BIGINT 否 100000000000L, -1L 64位有符号整形, 范围-263 + 1到263 - 1 FLOAT 是 无 32位二进制浮点型 DOUBLE 否 3.1415926 1E+7 64位二进制浮点型 DECIMAL 否 3.5BD, 99999999999.9999999BD 10 进制精确数字类型,整形部分范围-10^36+1到10^36-1, 小数部分精确到 10^(-18) VARCHAR 是 无 ( 注释2 ) 变长字符类型,n为长度,取值范围 1 到 65535 STRING 否 “abc”,’bcd’,”alibaba” ‘inc’ ( 注释3 ) 字符串类型,目前长度限制为 8M BINARY 是 无 二进制数据类型,目前长度限制为 8M DATETIME 否 DATETIME ‘2017-11-11 00:00:00’ 日期时间类型,范围从0000年1月1日到9999年12月31日,精确到毫秒(注释4) TIMESTAMP 是 TIMESTAMP ‘2017-11-11 00:00:00.123456789’ 与时区无关的时间戳类型,范围从0000年1月1日到9999年12月31日 23.59:59.999999999, 精确到纳秒 BOOLEAN 否 TRUE,FALSE boolean 类型, 取值 TRUE 或 FALSE 上述的各种数据类型均可为NULL。 说明 注释1:对于INT常量,如果超过INT取值范围,会转为BIGINT。如果超过BIGINT取值范围,会转为DOUBLE。 在旧版MaxCompute中,因为历史原因,SQL脚本中的所有INT类型都被转换为BIGINT,如下所示: create table a_bigint_table(a int); -- 这里的int实际当作bigint处理 select cast(id as int) from mytable; -- 这里的int实际当作bigint处理 为了与MaxCompute原有模式兼容,MaxCompute2.0在未设定odps.sql.type.system.odps2为true的情况下,仍保留此转换,但会报告一个警告,提示INT被当作BIGINT处理了,如果您的脚本有此种情况,建议全部改写为BIGINT,避免混淆。 注释2:VARCHAR类型常量可通过STRING常量的隐式转换表示。 注释3:STRING常量支持连接,例如abc xyz会解析为abcxyz,不同部分可以写在不同行上。 注释4:目前查询显示的时间值不包含毫秒。Tunnel 命令通过-dfp 来指定时间格式,可以指定到毫秒显示,例如tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS' ,关于Tunnel命令的更多信息,请参考Tunnel命令操作。 MaxCompute2.0支持的复杂类型如下表所示。 说明 SQL( create、select、insert等操作)中涉及到这几个复杂数据类型,需在SQL语句前加语句set odps.sql.type.system.odps2=true;,执行时set语句和SQL语句一起提交执行。 类型 定义方法 构造方法 ARRAY array< int >;array< struct< a:int, b:string >> array(1, 2, 3); array(array(1, 2); array(3, 4)) MAP map< string, string >;map< smallint, array< string>> map(“k1”, “v1”, “k2”, “v2”);map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y)) STRUCT struct< x:int, y:int>;struct< field1:bigint, field2:array< int>, field3:map< int, int>> named_struct(‘x’, 1, ‘y’, 2);named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200)

2019-12-01 23:10:55 0 浏览量 回答数 0

问题

【精品锦集】MySQL热门回答06

问问小秘 2019-12-01 19:55:49 10 浏览量 回答数 0

回答

如日期和时间文字中所述: MySQL可以识别DATE以下格式的值: 作为'YYYY-MM-DD'或'YY-MM-DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31','2012/12/31','2012^12^31',和'2012@12@31'是相等的。 作为没有格式'YYYYMMDD'或分隔符'YYMMDD'的字符串,前提是该字符串作为日期有意义。例如,'20070523'和'070523'被解释为'2007-05-23',但是'071332'是非法的(它具有无意义的月份和日期部分),成为'0000-00-00'。 作为数字YYYYMMDD或YYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905和830905被解释为'1983-09-05'。 因此,该字符串'08/25/2012'不是有效的MySQL日期文字。您有四个选择(按某种模糊的优先顺序,而没有您的要求的任何进一步信息): 配置Datepicker以使用支持的格式altField及其altFormat选项来提供日期: $( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" }); 或者,如果您希望用户看到YYYY-MM-DD格式的日期,则只需设置dateFormat选项即可: $( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); 使用MySQL的STR_TO_DATE()函数转换字符串: INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) 将从jQuery接收的字符串转换成PHP可以理解为日期的形式,例如一个DateTime对象: $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']); 然后: 获取合适的格式化字符串: $date = $dt->format('Y-m-d'); 获取UNIX时间戳: $timestamp = $dt->getTimestamp(); 然后将其直接传递给MySQL的FROM_UNIXTIME()函数: INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp)) 手动将字符串转换为有效的文字: $parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]"; 警告 您的代码容易受到SQL注入的攻击。 您确实应该使用准备好的语句,您将变量作为参数传递给该语句,这些参数无法通过SQL进行评估。如果您不知道我在说什么或如何解决它,请阅读Bobby Tables的故事。 此外,作为规定的出台对PHP手册章mysql_*功能: 自PHP 5.5.0起不推荐使用该扩展,不建议编写新代码,因为将来会删除该扩展。相反,应使用mysqli或PDO_MySQL扩展名。另请参见MySQL API概述,以获取选择MySQL API时的更多帮助。 您似乎在使用DATETIME或TIMESTAMP列来保存日期值;我建议您考虑改用MySQL的DATE类型。正如上文中DATE,DATETIME和TIMESTAMP类型: 该DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并以'YYYY-MM-DD'格式显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。 该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以'YYYY-MM-DD HH:MM:SS'格式显示值。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。UTC TIMESTAMP的范围是UTC。'1970-01-01 00:00:01''2038-01-19 03:14:07'来源:stack overflow

保持可爱mmm 2020-05-10 21:55:07 0 浏览量 回答数 0

问题

Net开发-获取Config参数值

雷锋大人 2019-12-01 21:17:42 5587 浏览量 回答数 3

问题

Linux运维人员最常用150个命令汇总

福利达人 2019-12-01 21:47:08 3342 浏览量 回答数 1

回答

举一些常用的例子: flink中提供的大量的算子,下面将介绍常用的算子操作方式: map DataStream --> DataStream:输入一个参数产生一个参数,map的功能是对输入的参数进行转换操作。 flatMap DataStream --> DataStream:输入一个参数,产生0、1或者多个输出,这个多用于拆分操作 filter DataStream --> DataStream:结算每个元素的布尔值,并返回为true的元素 keyBy DataSteam --> DataStream:逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。以key来分组。 注意:以下类型无法作为key POJO类,且没有实现hashCode函数 任意形式的数组类型 reduce KeyedStream --> DataStream:滚动合并操作,合并当前元素和上一次合并的元素结果。 fold KeyedStream --> DataStream:用一个初始的一个值,与其每个元素进行滚动合并操作。 aggregation KeyedStream --> DataStream:分组流数据的滚动聚合操作:min和minBy的区别是min返回的是一个最小值,而minBy返回的是其字段中包含的最小值的元素(同样元原理适用于max和maxBy) window KeyedStream --> DataStream:windows是在一个分区的KeyedStreams中定义的,windows根据某些特性将每个key的数据进行分组(例如:在5s内到达的数据)。 windowAll DataStream --> AllWindowedStream:Windows可以在一个常规的DataStream中定义,Windows根据某些特性对所有的流(例如:5s内到达的数据)。 注意:这个操作在很多情况下都不是并行操作的,所有的记录都会聚集到一个windowAll操作的任务中 window apply WindowedStream --> DataStream AllWindowedStream --> DataStream:将一个通用的函数作为一个整体传递给window。 window reduce WindowedStream --> DataStream:给窗口赋予一个reduce的功能,并返回一个reduce的结果。 window fold WindowedStream --> DataStream:给窗口赋予一个fold的功能,并返回一个fold后的结果。 aggregation on windows WindowedStream --> DataStream:对window的元素做聚合操作,min和minBy的区别是min返回的是最小值,而minBy返回的是包含最小值字段的元素。(同样原理适用于max和maxBy) union DataStream --> DataStream:对两个或两个以上的DataStream做union操作,产生一个包含所有的DataStream元素的新DataStream。 注意:如果将一个DataStream和自己做union操作,在新的DataStream中,将看到每个元素重复两次 window join DataStream,DataStream --> DataStream:根据给定的key和window对两个DataStream做join操作 window coGroup DataStream,DataStream --> DataStream:根据一个给定的key和window对两个DataStream做CoGroups操作。 connect DataStream,DataStream --> ConnectedStreams:连接两个保持它们类型的数据流。 coMap、coFlatMap ConnectedStreams --> DataStream:作用于connected数据流上,功能与map和flatMap一样。 split DataStream --> SplitStream:根据某些特征把一个DataStream拆分成两个或多个DataStream select SplitStream --> DataStream:从一个SplitStream中获取一个或多个DataStream iterate DataStream --> IterativeStream --> DataStream:在流程中创建一个反馈循环,将一个操作的输出重定向到之前的操作,这对于定义持续更新模型的算法来说很有意义的。 extract timestamps DataStream --> DataStream:提取记录中的时间戳来跟需要事件时间的window一起发挥作用。

茶什i 2019-12-02 03:19:28 0 浏览量 回答数 0

问题

日期和时间函数是什么?

nicenelly 2019-12-01 21:26:27 7516 浏览量 回答数 0

回答

Re请求后台取不到code值获得userId有问题,一直验证失败(.NET) using System;using System.Security.Cryptography;using System.Text;namespace DingTalkApp.Services{    public class DingTalkEncrypt    {        public static string GetSwcSH1(string value)        {            SHA1 algorithm = SHA1.Create();            byte[] data = algorithm.ComputeHash(Encoding.UTF8.GetBytes(value));            string sh1 = "";            for (int i = 0; i < data.Length; i++)            {                sh1 += data.ToString("x2").ToUpperInvariant();            }            return sh1;        }        /// <summary>        /// 创建随机字符串        /// </summary>        /// <returns></returns>        public static string createNonceStr()        {            int length = 16;            string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";            string str = "";            Random rad = new Random();            for (int i = 0; i < length; i++)            {                str += chars.Substring(rad.Next(0, chars.Length - 1), 1);            }            return str;        }        /// 将c# DateTime时间格式转换为Unix时间戳格式          /// <summary>          /// 将c# DateTime时间格式转换为Unix时间戳格式          /// </summary>          /// <param name="time">时间</param>          /// <returns>double</returns>          public static int ConvertDateTimeInt(System.DateTime time)        {            int intResult = 0;            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));            intResult = Convert.ToInt32((time - startTime).TotalSeconds);            return intResult;        }    }}使用时如下        [HttpGet]        public System.Collections.IEnumerable GetDtConfig(string userid, string corpid)        {            if (!string.IsNullOrEmpty(corpid) && _context.DT_CorpTbs.Where(p => p.CorpID == corpid).Count() > 0)            {                try                {                    string jsurl;                    var corptbid = _context.DT_CorpTbs.Where(p => p.CorpID == corpid).First();                    DT_AppTb da = _context.DT_AppTbs.Where(p => p.DT_CorpTbCorpID == corpid).First();                    jsurl = da.Url;                    int timestamp = Services.DingTalkEncrypt.ConvertDateTimeInt(DateTime.Now);                    string nonceStr = Services.DingTalkEncrypt.createNonceStr();                    string[] paramArr = new String[] { "jsapi_ticket=" + _context.DT_TicketTbs.Where(p => p.DT_TokenTb.DT_CorpTbCorpID == corpid).Select(p => p.ticket).First(), "timestamp=" + timestamp, "noncestr=" + nonceStr, "url=" + jsurl };                    // 这里参数的顺序要按照 key 值 ASCII 码升序排序                     Array.Sort(paramArr);                    // 将排序后的结果拼接成一个字符串                    string content = string.Concat(paramArr[0], "&", paramArr[1], "&", paramArr[2], "&", paramArr[3]);                    string signature = Services.DingTalkEncrypt.GetSwcSH1(content).ToLower();                    ViewData["access_token"] = _context.DT_TokenTbs.Where(p => p.DT_CorpTbCorpID == corpid).Select(p => p.access_token).First();                    ViewData["agentId"] = da.AgentID;                    ViewData["corpId"] = corptbid.CorpID;                    ViewData["timeStamp"] = timestamp;                    ViewData["nonceStr"] = nonceStr;                    ViewData["signature"] = signature;                    ViewData["corpName"] = corptbid.CorpName;                    ViewData["url"] = da.Url;                    ViewData["dd_nav_bgcolor"] = da.Dd_nav_bgcolor;                    return ViewData;                }                catch                {                    return null;                }            }            else            {                return null;            }        }

unlee 2019-12-02 00:47:48 0 浏览量 回答数 0

回答

Checkpoint介绍 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 证应用流图状态的一致性。Flink的checkpoint机制原理来自“Chandy-Lamport algorithm”算法。 每个需要checkpoint的应用在启动时,Flink的JobManager为其创建一个 CheckpointCoordinator,CheckpointCoordinator全权负责本应用的快照制作。 CheckpointCoordinator周期性的向该流应用的所有source算子发送barrier。 2.当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状 态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告 自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理 3.下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自身的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身 快照情况,同时向自身所有下游算子广播该barrier,恢复数据处理。 每个算子按照步骤3不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功; 否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败 如果一个算子有两个输入源,则暂时阻塞先收到barrier的输入源,等到第二个输入源相 同编号的barrier到来时,再制作自身快照并向下游广播该barrier。具体如下图所示 两个输入源 checkpoint 过程 假设算子C有A和B两个输入源 在第i个快照周期中,由于某些原因(如处理时延、网络时延等)输入源A发出的 barrier先到来,这时算子C暂时将输入源A的输入通道阻塞,仅收输入源B的数据。 当输入源B发出的barrier到来时,算子C制作自身快照并向CheckpointCoordinator报 告自身的快照制作情况,然后将两个barrier合并为一个,向下游所有的算子广播。 当由于某些原因出现故障时,CheckpointCoordinator通知流图上所有算子统一恢复到某 个周期的checkpoint状态,然后恢复数据流处理。分布式checkpoint机制保证了数据仅被 处理一次(Exactly Once)。 持久化存储 目前,Checkpoint持久化存储可以使用如下三种: MemStateBackend 该持久化存储主要将快照数据保存到JobManager的内存中,仅适合作为测试以及 快照的数据量非常小时使用,并不推荐用作大规模商业部署。 FsStateBackend 该持久化存储主要将快照数据保存到文件系统中,目前支持的文件系统主要是 HDFS和本地文件。如果使用HDFS,则初始化FsStateBackend时,需要传入以 “hdfs://”开头的路径(即: new FsStateBackend("hdfs:///hacluster/checkpoint")), 如果使用本地文件,则需要传入以“file://”开头的路径(即:new FsStateBackend("file:///Data"))。在分布式情况下,不推荐使用本地文件。如果某 个算子在节点A上失败,在节点B上恢复,使用本地文件时,在B上无法读取节点 A上的数据,导致状态恢复失败。 RocksDBStateBackend RocksDBStatBackend介于本地文件和HDFS之间,平时使用RocksDB的功能,将数 据持久化到本地文件中,当制作快照时,将本地数据制作成快照,并持久化到 FsStateBackend中(FsStateBackend不必用户特别指明,只需在初始化时传入HDFS 或本地路径即可,如new RocksDBStateBackend("hdfs:///hacluster/checkpoint")或new RocksDBStateBackend("file:///Data"))。 如果用户使用自定义窗口(window),不推荐用户使用RocksDBStateBackend。在自 定义窗口中,状态以ListState的形式保存在StatBackend中,如果一个key值中有多 个value值,则RocksDB读取该种ListState非常缓慢,影响性能。用户可以根据应用 的具体情况选择FsStateBackend+HDFS或RocksStateBackend+HDFS。 语法 ​ val env = StreamExecutionEnvironment.getExecutionEnvironment() // start a checkpoint every 1000 ms env.enableCheckpointing(1000) // advanced options: // 设置checkpoint的执行模式,最多执行一次或者至少执行一次 env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE) // 设置checkpoint的超时时间 env.getCheckpointConfig.setCheckpointTimeout(60000) // 如果在只做快照过程中出现错误,是否让整体任务失败:true是 false不是 env.getCheckpointConfig.setFailTasksOnCheckpointingErrors(false) //设置同一时间有多少 个checkpoint可以同时执行 env.getCheckpointConfig.setMaxConcurrentCheckpoints(1) ​ 例子 需求 假定用户需要每隔1秒钟需要统计4秒中窗口中数据的量,然后对统计的结果值进行checkpoint处理 数据规划 使用自定义算子每秒钟产生大约10000条数据。 
 产生的数据为一个四元组(Long,String,String,Integer)—------(id,name,info,count)。 
 数据经统计后,统计结果打印到终端输出。 
 打印输出的结果为Long类型的数据。 
 开发思路 
 source算子每隔1秒钟发送10000条数据,并注入到Window算子中。 window算子每隔1秒钟统计一次最近4秒钟内数据数量。 每隔1秒钟将统计结果打印到终端 每隔6秒钟触发一次checkpoint,然后将checkpoint的结果保存到HDFS中。 //发送数据形式 case class SEvent(id: Long, name: String, info: String, count: Int) class SEventSourceWithChk extends RichSourceFunction[SEvent]{ private var count = 0L private var isRunning = true private val alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZYX0987654321" // 任务取消时调用 override def cancel(): Unit = { isRunning = false } //// source算子的逻辑,即:每秒钟向流图中注入10000个元组 override def run(sourceContext: SourceContext[SEvent]): Unit = { while(isRunning) { for (i <- 0 until 10000) { sourceContext.collect(SEvent(1, "hello-"+count, alphabet,1)) count += 1L } Thread.sleep(1000) } } } /** 该段代码是流图定义代码,具体实现业务流程,另外,代码中窗口的触发时间使 用了event time。 */ object FlinkEventTimeAPIChkMain { def main(args: Array[String]): Unit ={ val env = StreamExecutionEnvironment.getExecutionEnvironment env.setStateBackend(new FsStateBackend("hdfs://hadoop01:9000/flink-checkpoint/checkpoint/")) env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE) env.getCheckpointConfig.setCheckpointInterval(6000) env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) // 应用逻辑 val source: DataStream[SEvent] = env.addSource(new SEventSourceWithChk) source.assignTimestampsAndWatermarks(new AssignerWithPeriodicWatermarks[SEvent] { // 设置watermark override def getCurrentWatermark: Watermark = { new Watermark(System.currentTimeMillis()) } // 给每个元组打上时间戳 override def extractTimestamp(t: SEvent, l: Long): Long = { System.currentTimeMillis() } }) .keyBy(0) .window(SlidingEventTimeWindows.of(Time.seconds(4), Time.seconds(1))) .apply(new WindowStatisticWithChk) .print() env.execute() } } //该数据在算子制作快照时用于保存到目前为止算子记录的数据条数。 // 用户自定义状态 class UDFState extends Serializable{ private var count = 0L // 设置用户自定义状态 def setState(s: Long) = count = s // 获取用户自定状态 def getState = count } //该段代码是window算子的代码,每当触发计算时统计窗口中元组数量。 class WindowStatisticWithChk extends WindowFunction[SEvent, Long, Tuple, TimeWindow] with ListCheckpointed[UDFState]{ private var total = 0L // window算子的实现逻辑,即:统计window中元组的数量 override def apply(key: Tuple, window: TimeWindow, input: Iterable[SEvent], out: Collector[Long]): Unit = { var count = 0L for (event <- input) { count += 1L } total += count out.collect(count) } // 从自定义快照中恢复状态 override def restoreState(state: util.List[UDFState]): Unit = { val udfState = state.get(0) total = udfState.getState } // 制作自定义状态快照 override def snapshotState(checkpointId: Long, timestamp: Long): util.List[UDFState] = { val udfList: util.ArrayList[UDFState] = new util.ArrayList[UDFState] val udfState = new UDFState udfState.setState(total) udfList.add(udfState) udfList } } flink-SQL Table API和SQL捆绑在flink-table Maven工件中。必须将以下依赖项添加到你的项目才能使用Table API和SQL: org.apache.flink flink-table_2.11 1.5.0 另外,你需要为Flink的Scala批处理或流式API添加依赖项。对于批量查询,您需要添加: org.apache.flink flink-scala_2.11 1.5.0 Table API和SQL程序的结构 Flink的批处理和流处理的Table API和SQL程序遵循相同的模式; 所以我们只需要使用一种来演示即可 要想执行flink的SQL语句,首先需要获取SQL的执行环境: 两种方式(batch和streaming): // *************** // STREAMING QUERY // *************** val sEnv = StreamExecutionEnvironment.getExecutionEnvironment // create a TableEnvironment for streaming queries val sTableEnv = TableEnvironment.getTableEnvironment(sEnv) // *********** // BATCH QUERY // *********** val bEnv = ExecutionEnvironment.getExecutionEnvironment // create a TableEnvironment for batch queries val bTableEnv = TableEnvironment.getTableEnvironment(bEnv) 通过getTableEnvironment可以获取TableEnviromment;这个TableEnviromment是Table API和SQL集成的核心概念。它负责: 在内部目录中注册一个表 注册外部目录 执行SQL查询 注册用户定义的(标量,表格或聚合)函数 转换DataStream或DataSet成Table 持有一个ExecutionEnvironment或一个参考StreamExecutionEnvironment 在内部目录中注册一个表 TableEnvironment维护一个按名称注册的表的目录。有两种类型的表格,输入表格和输出表格。 输入表可以在Table API和SQL查询中引用并提供输入数据。输出表可用于将表API或SQL查询的结果发送到外部系统 输入表可以从各种来源注册: 现有Table对象,通常是表API或SQL查询的结果。 TableSource,它访问外部数据,例如文件,数据库或消息传递系统。 DataStream或DataSet来自DataStream或DataSet程序。 输出表可以使用注册TableSink。 注册一个表 // get a TableEnvironment val tableEnv = TableEnvironment.getTableEnvironment(env) // register the Table projTable as table "projectedX" tableEnv.registerTable("projectedTable", projTable) // Table is the result of a simple projection query val projTable: Table = tableEnv.scan("projectedTable ").select(...) 注册一个tableSource TableSource提供对存储在诸如数据库(MySQL,HBase等),具有特定编码(CSV,Apache [Parquet,Avro,ORC],...)的文件的存储系统中的外部数据的访问或者消息传送系统(Apache Kafka,RabbitMQ,...) // get a TableEnvironment val tableEnv = TableEnvironment.getTableEnvironment(env) // create a TableSource val csvSource: TableSource = new CsvTableSource("/path/to/file", ...) // register the TableSource as table "CsvTable" tableEnv.registerTableSource("CsvTable", csvSource) 注册一个tableSink 注册TableSink可用于将表API或SQL查询的结果发送到外部存储系统,如数据库,键值存储,消息队列或文件系统(使用不同的编码,例如CSV,Apache [Parquet ,Avro,ORC],...) // get a TableEnvironment val tableEnv = TableEnvironment.getTableEnvironment(env) // create a TableSink val csvSink: TableSink = new CsvTableSink("/path/to/file", ...) // define the field names and types val fieldNames: Array[String] = Array("a", "b", "c") val fieldTypes: Array[TypeInformation[_]] = Array(Types.INT, Types.STRING, Types.LONG) // register the TableSink as table "CsvSinkTable" tableEnv.registerTableSink("CsvSinkTable", fieldNames, fieldTypes, csvSink) 例子 //创建batch执行环境 val env = ExecutionEnvironment.getExecutionEnvironment //创建table环境用于batch查询 val tableEnvironment = TableEnvironment.getTableEnvironment(env) //加载外部数据 val csvTableSource = CsvTableSource.builder() .path("data1.csv")//文件路径 .field("id" , Types.INT)//第一列数据 .field("name" , Types.STRING)//第二列数据 .field("age" , Types.INT)//第三列数据 .fieldDelimiter(",")//列分隔符,默认是"," .lineDelimiter("\n")//换行符 .ignoreFirstLine()//忽略第一行 .ignoreParseErrors()//忽略解析错误 .build() //将外部数据构建成表 tableEnvironment.registerTableSource("tableA" , csvTableSource) //TODO 1:使用table方式查询数据 val table = tableEnvironment.scan("tableA").select("id , name , age").filter("name == 'lisi'") //将数据写出去 table.writeToSink(new CsvTableSink("bbb" , "," , 1 , FileSystem.WriteMode.OVERWRITE)) //TODO 2:使用sql方式 // val sqlResult = tableEnvironment.sqlQuery("select id,name,age from tableA where id > 0 order by id limit 2") //// //将数据写出去 // sqlResult.writeToSink(new CsvTableSink("aaaaaa.csv", ",", 1, FileSystem.WriteMode.OVERWRITE)) able和DataStream和DataSet的集成 1:将DataStream或DataSet转换为表格 在上面的例子讲解中,直接使用的是:registerTableSource注册表 对于flink来说,还有更灵活的方式:比如直接注册DataStream或者DataSet转换为一张表。 然后DataStream或者DataSet就相当于表,这样可以继续使用SQL来操作流或者批次的数据 语法: // get TableEnvironment // registration of a DataSet is equivalent Env:DataStream val tableEnv = TableEnvironment.getTableEnvironment(env) val stream: DataStream[(Long, String)] = ... // register the DataStream as Table "myTable" with fields "f0", "f1" tableEnv.registerDataStream("myTable", stream) 例子 object SQLToDataSetAndStreamSet { def main(args: Array[String]): Unit = { // set up execution environment val env = StreamExecutionEnvironment.getExecutionEnvironment val tEnv = TableEnvironment.getTableEnvironment(env) //构造数据 val orderA: DataStream[Order] = env.fromCollection(Seq( Order(1L, "beer", 3), Order(1L, "diaper", 4), Order(3L, "rubber", 2))) val orderB: DataStream[Order] = env.fromCollection(Seq( Order(2L, "pen", 3), Order(2L, "rubber", 3), Order(4L, "beer", 1))) // 根据数据注册表 tEnv.registerDataStream("OrderA", orderA) tEnv.registerDataStream("OrderB", orderB) // union the two tables val result = tEnv.sqlQuery( "SELECT * FROM OrderA WHERE amount > 2 UNION ALL " + "SELECT * FROM OrderB WHERE amount < 2") result.writeToSink(new CsvTableSink("ccc" , "," , 1 , FileSystem.WriteMode.OVERWRITE)) env.execute() } } case class Order(user: Long, product: String, amount: Int) 将表转换为DataStream或DataSet A Table可以转换成a DataStream或DataSet。通过这种方式,可以在Table API或SQL查询的结果上运行自定义的DataStream或DataSet程序 1:将表转换为DataStream 有两种模式可以将 Table转换为DataStream: 1:Append Mode 将一个表附加到流上 2:Retract Mode 将表转换为流 语法格式: // get TableEnvironment. // registration of a DataSet is equivalent // ge 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.toAppendStreamRow // convert the Table into an append DataStream of Tuple2[String, Int] val dsTuple: DataStream[(String, Int)] dsTuple = tableEnv.toAppendStream(String, Int) // 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.toRetractStreamRow 例子: object TableTODataSet_DataStream { def main(args: Array[String]): Unit = { //构造数据,转换为table val data = List( Peoject(1L, 1, "Hello"), Peoject(2L, 2, "Hello"), Peoject(3L, 3, "Hello"), Peoject(4L, 4, "Hello"), Peoject(5L, 5, "Hello"), Peoject(6L, 6, "Hello"), Peoject(7L, 7, "Hello World"), Peoject(8L, 8, "Hello World"), Peoject(8L, 8, "Hello World"), Peoject(20L, 20, "Hello World")) val env = StreamExecutionEnvironment.getExecutionEnvironment env.setParallelism(1) val tEnv = TableEnvironment.getTableEnvironment(env) val stream = env.fromCollection(data) val table: Table = tEnv.fromDataStream(stream) //TODO 将table转换为DataStream----[数控等离子切割机](http://www.158cnc.com)[http://www.158cnc.com](http://www.158cnc.com)将一个表附加到流上Append Mode val appendStream: DataStream[Peoject] = tEnv.toAppendStream[Peoject](table) //TODO 将表转换为流Retract Mode true代表添加消息,false代表撤销消息 val retractStream: DataStream[(Boolean, Peoject)] = tEnv.toRetractStream[Peoject](table) retractStream.print() env.execute() } } case class Peoject(user: Long, index: Int, content: String) 将表转换为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.toDataSetRow // convert the Table into a DataSet of Tuple2[String, Int] val dsTuple: DataSet[(String, Int)] = tableEnv.toDataSet(String, Int) 例子: case class Peoject(user: Long, index: Int, content: String) object TableTODataSet{ def main(args: Array[String]): Unit = { //构造数据,转换为table val data = List( Peoject(1L, 1, "Hello"), Peoject(2L, 2, "Hello"), Peoject(3L, 3, "Hello"), Peoject(4L, 4, "Hello"), Peoject(5L, 5, "Hello"), Peoject(6L, 6, "Hello"), Peoject(7L, 7, "Hello World"), Peoject(8L, 8, "Hello World"), Peoject(8L, 8, "Hello World"), Peoject(20L, 20, "Hello World")) //初始化环境,加载table数据 val env = ExecutionEnvironment.getExecutionEnvironment env.setParallelism(1) val tableEnvironment = TableEnvironment.getTableEnvironment(env) val collection: DataSet[Peoject] = env.fromCollection(data) val table: Table = tableEnvironment.fromDataSet(collection) //TODO 将table转换为dataSet val toDataSet: DataSet[Peoject] = tableEnvironment.toDataSet[Peoject](table) toDataSet.print() // env.execute() } }

凹凹凸曼 2020-06-16 19:23:12 0 浏览量 回答数 0

问题

【精品问答】Java实战200例(附源码)

珍宝珠 2020-02-14 11:55:46 14308 浏览量 回答数 10

问题

中间件性能初赛关于windows环境下的一些文档汇总

玄弟 2019-12-01 21:45:14 10515 浏览量 回答数 4

问题

12个非常实用的JavaScript小技巧

技术小菜鸟 2019-12-01 21:37:52 3620 浏览量 回答数 1

问题

V3版API 签名机制是怎样的?

轩墨 2019-12-01 20:57:42 1487 浏览量 回答数 0

问题

云监控中签名算法

反向一觉 2019-12-01 21:24:30 1014 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播