建设银行手机银行网站用户名是什么原因外国网站 dns解析失败
建设银行手机银行网站用户名是什么原因,外国网站 dns解析失败,南平seo,营销型和展示型网站的区别1. INSERT 语句是干嘛的
INSERT 用于把查询结果或字面量数据写入目标表#xff08;sink 表#xff09;。在 Flink 里#xff0c;执行 INSERT 会提交一个 Flink Job#xff08;流式作业通常是长期运行#xff09;。2. Java 里怎么跑 INSERT#xff1a;单条 executeSql vs …1. INSERT 语句是干嘛的INSERT用于把查询结果或字面量数据写入目标表sink 表。在 Flink 里执行 INSERT 会提交一个 Flink Job流式作业通常是长期运行。2. Java 里怎么跑 INSERT单条 executeSql vs 多条 StatementSet2.1 单条 INSERTexecuteSql 立即提交作业executeSql()执行 INSERT 会立刻提交 Job并返回TableResult你可以通过它拿到 JobClient 查询状态。TableEnvironmenttEnvTableEnvironment.create(...);// source sinktEnv.executeSql(CREATE TABLE Orders (user BIGINT, product VARCHAR, amount INT) WITH (...));tEnv.executeSql(CREATE TABLE RubberOrders(product VARCHAR, amount INT) WITH (...));// submit job immediatelyTableResultr1tEnv.executeSql(INSERT INTO RubberOrders SELECT product, amount FROM Orders WHERE product LIKE %Rubber%);System.out.println(r1.getJobClient().get().getJobStatus());2.2 多条 INSERTStatementSet.addInsertSql 延迟执行一次 execute 提交当你要把同一个源表数据分流写入多个 sink比如 RubberOrders、GlassOrders用StatementSet更合适先addInsertSql()收集多条语句最后execute()一次性提交。tEnv.executeSql(CREATE TABLE GlassOrders(product VARCHAR, amount INT) WITH (...));StatementSetstmtSettEnv.createStatementSet();stmtSet.addInsertSql(INSERT INTO RubberOrders SELECT product, amount FROM Orders WHERE product LIKE %Rubber%);stmtSet.addInsertSql(INSERT INTO GlassOrders SELECT product, amount FROM Orders WHERE product LIKE %Glass%);TableResultr2stmtSet.execute();System.out.println(r2.getJobClient().get().getJobStatus());注意addInsertSql()每次只能接收一条 INSERT 语句不要把多个 INSERT 拼一条字符串。3. INSERT INTO / INSERT OVERWRITE追加 vs 覆盖3.1 总体语法Insert from Select[EXECUTE]INSERT{INTO|OVERWRITE }[catalog.][db.]table_name[PARTITIONpart_spec][column_list]select_statement3.2 INTO追加写入Append不覆盖已有数据或已有分区数据新结果继续追加。3.3 OVERWRITE覆盖写入OverwriteINSERT OVERWRITE会覆盖目标表或目标分区已有数据。常用于离线批处理、重跑分区、或者“以最后一次跑出来的结果为准”的场景。4. 分区写入静态分区 vs 动态分区假设目标表是分区表CREATETABLEcountry_page_view(userSTRING,cntINT,dateSTRING,country STRING)PARTITIONEDBY(date,country)WITH(...);4.1 写入静态分区date/country 都固定INSERTINTOcountry_page_viewPARTITION(date2019-8-30,countryChina)SELECTuser,cntFROMpage_view_source;4.2 半动态分区date 固定、country 每行决定INSERTINTOcountry_page_viewPARTITION(date2019-8-30)SELECTuser,cnt,countryFROMpage_view_source;4.3 覆盖分区写入静态/半动态都支持INSERTOVERWRITE country_page_viewPARTITION(date2019-8-30,countryChina)SELECTuser,cntFROMpage_view_source;INSERTOVERWRITE country_page_viewPARTITION(date2019-8-30)SELECTuser,cnt,countryFROMpage_view_source;5. EXECUTE 关键字显式执行语义等价Flink 允许在 INSERT 前面加EXECUTE用于强调“我要执行这条语句”但语义上等价于不加。EXECUTEINSERTINTOcountry_page_viewPARTITION(date2019-8-30,countryChina)SELECTuser,cntFROMpage_view_source;6. column_list部分列写入Partial Insert怎么映射Flink 支持指定目标列列表把 SELECT 的列按列表顺序写入指定列未写到的列会被置为NULL前提该列可空。例表T(a INT, b INT, c INT)INSERTINTOT(c,b)SELECTx,yFROMS;含义是x写入cy写入ba被置为NULL如果a允许为 NULL对 connector/sink 开发者可以通过DynamicTableSink.Context.getTargetColumns()获取用户指定的目标列决定如何处理“部分列更新”。7. INSERT … VALUES直接插入字面量行除了INSERT INTO ... SELECT ...也可以直接写 values[EXECUTE]INSERT{INTO|OVERWRITE } table_nameVALUES(val1,val2,...),(val1,val2,...);示例CREATETABLEstudents(name STRING,ageINT,gpaDECIMAL(3,2))WITH(...);INSERTINTOstudentsVALUES(fred flintstone,35,1.28),(barney rubble,32,2.32);8. 一条 SQL 写多个表EXECUTE STATEMENT SET如果你在 SQL 层就想“一次提交多条 insert”可以用EXECUTESTATEMENTSETBEGINinsert_statement;insert_statement;END;其中insert_statement可以是INSERT ... SELECT或INSERT ... VALUES。9. 生产实践建议你放到博客结尾很加分多 sink 分流优先用 StatementSet一次提交、共享规划写法更稳。OVERWRITE 慎用尤其是流式任务确认 connector 对覆盖语义的支持与目标表期望行为。分区写入要区分静态/动态静态分区适合重跑动态分区适合实时按维度落地。部分列写入会把其它列写成 NULL对非空列/主键列要提前约束否则容易写入失败或产生脏数据。