使用 Java SDK 获取 MaxCompute 的表结构并写入到 Excel 中
2021/10/12 17:14:31
本文主要是介绍使用 Java SDK 获取 MaxCompute 的表结构并写入到 Excel 中,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package com.xjr7670; import com.aliyun.odps.*; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; import com.aliyun.odps.type.TypeInfo; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Array; import java.util.*; /** * Hello world! * */ public class GetOdpsData { private static final String accessId = "你的 accessId"; private static final String accessKey = "你的 accessKey"; private static final String project = "项目名"; private static final String endpoint = "http://service.cn-shenzhen.maxcompute.aliyun.com/api"; public static void main(String[] args) { Map<String, ArrayList<ArrayList<String>>> data = getData(); write2excel(data); } private static void write2excel(Map<String, ArrayList<ArrayList<String>>> mapData) { /** * 写入到 Excel 中 */ String resultExcelPath = "e:/temp/odps_table.xlsx"; try { System.out.println("正在写入 Excel..."); FileOutputStream fos = new FileOutputStream(resultExcelPath); HSSFWorkbook wbk = new HSSFWorkbook(); Set<String> keys = mapData.keySet(); List<String> sortedNames = new ArrayList<String>(keys); Collections.sort(sortedNames, new Comparator<String>() { // 排个序,把 ods 的表放前面,dwd 的表放后面 @Override public int compare(String o1, String o2) { String o1Pre3 = o1.substring(0, 3); String o2Pre3 = o2.substring(0, 3); String o1Sub = o1.substring(4); String o2Sub = o2.substring(4); if (o1Pre3.compareTo(o2Pre3) == 0 ) { // 相同的 ods/dwd 表,比较 _ 后面的字符 if (o1Sub.compareTo(o2Sub) > 0) { return 1; } else { return -1; } } else { return o2.compareTo(o1); } } }); int sheetIndex = 0; for (String tbName : sortedNames) { ArrayList<ArrayList<String>> colLists = mapData.get(tbName); HSSFSheet sheet = wbk.createSheet(); wbk.setSheetName(sheetIndex++, tbName); int r = 0; HSSFRow titleRow = sheet.createRow(r++); titleRow.createCell(0).setCellValue("字段名"); titleRow.createCell(1).setCellValue("字段类型"); titleRow.createCell(2).setCellValue("字段注释"); for (ArrayList<String> row : colLists) { int col = 0; String colName = row.get(0); String colComment = row.get(1); String colType = row.get(2); HSSFRow sheetRow = sheet.createRow(r++); sheetRow.createCell(col++).setCellValue(colName); sheetRow.createCell(col++).setCellValue(colType); sheetRow.createCell(col).setCellValue(colComment); } fos.flush(); } wbk.write(fos); fos.close(); System.out.println("Excel 写入成功!"); } catch (FileNotFoundException e) { System.out.println("文件不存在。"); e.printStackTrace(); } catch (IOException e) { System.out.println("IOException"); e.printStackTrace(); } } public static Map<String, ArrayList<ArrayList<String>>> getData() { Account account = new AliyunAccount(accessId, accessKey); Odps odps = new Odps(account); odps.setEndpoint(endpoint); odps.setDefaultProject(project); Map<String, ArrayList<ArrayList<String>>> data = new HashMap<>(); System.out.println("正在获取 ODPS 表结构..."); for (Table t: odps.tables()) { TableSchema schema = t.getSchema(); String tName = t.getName(); if (tName.startsWith("ods") || tName.startsWith("dwd")) { // 只取 ods 和 dwd 层的表 System.out.println("\t" + tName); ArrayList<ArrayList<String>> list = new ArrayList<>(); List<Column> columns = schema.getColumns(); for (Column col: columns) { ArrayList<String> tmpList = new ArrayList<>(); String colName = col.getName(); String colComment = col.getComment(); TypeInfo typeInfo = col.getTypeInfo(); String colType = typeInfo.getTypeName(); tmpList.add(colName); tmpList.add(colComment); tmpList.add(colType); list.add(tmpList); } data.put(tName, list); } } System.out.println("ODPS 数据获取成功,开始写入..."); return data; } }
这篇关于使用 Java SDK 获取 MaxCompute 的表结构并写入到 Excel 中的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)