流写入DB

import java.sql.*;
import java.io.*;

/**
 *
 * @author Administrator
 *
 */

public class JpgAndOracle {
// Create.java
 public void Create(String a){
  
 try {
  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
  String URL="jdbc:oracle:thin:@localhost:1521:gatest";
  String user="water";
  String password="water";
  
  Connection con = DriverManager.getConnection(URL,user,password);
  Statement st = con.createStatement();

  st.execute("CREATE TABLE mytable(id varchar2(10) null, picname varchar2(50) null, pic BLOB null);");
  st.close();
  con.close();
   } catch(Exception e) {
    e.printStackTrace();
   }

 }

 public void SavePic(String a) {
 
   Connection con;    
   PreparedStatement st;
   try {
  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
  String URL="jdbc:oracle:thin:@localhost:1521:gatest";
  String user="water";
  String password="water";
  con = DriverManager.getConnection(URL,user,password);  
     String sql = "INSERT INTO mytable(id,picname, pic) values('1','mmpic',?)";
    st = con.prepareStatement(sql);
    File f = new File("d://mmpic.jpg");
    FileInputStream fis = new FileInputStream(f);
    st.setBinaryStream(1, fis, (int)f.length());
    st.executeUpdate();
    st.close();
    con.close();
   } catch(Exception e) {
    e.printStackTrace();
   }
 
 }

// ReadPic.java   从数据库中读出图片存成文件
 public void ReadPic(String a) {

   Connection con;
   Statement st;
  
   try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String URL="jdbc:oracle:thin:@localhost:1521:gatest";
    String user="water";
    String password="water";
    con = DriverManager.getConnection(URL,user,password);  
    String sql = "SELECT pic FROM mytable WHERE id='1'";
    st = con.createStatement();
    ResultSet rs = st.executeQuery(sql);
    rs.next();
    File f = new File("C://b.jpg");
    FileOutputStream fos = new FileOutputStream(f);
    InputStream is = rs.getBinaryStream("pic");
    int c;
    byte b[] = new byte[4*1024];
    while ((c=is.read(b))!=-1) {
     fos.write(b, 0, c);
    }
    fos.flush();
    is.close();
    st.close();
    con.close();
   } catch(Exception e) {
    e.printStackTrace();
   }
 }
 
 public static void main(String[] args) throws IOException {
        int sw = 3;    
        JpgAndOracle test = new JpgAndOracle();          
        switch (sw) {
        case 1: // 建表
        {
            test.Create("a");
            break;
        }
        case 2: // 读图片插入数据库
        {
         test.SavePic("b");
            break;
        }
        case 3: // 读出图片行成文件
        {
         test.ReadPic("c");
            break;
        }
        }
    }
}

### 如何使用 Flink 将数据写入 Hive #### 配置依赖项 为了使 Flink 能够与 Hive 交互,需要引入必要的 Maven 依赖项。以下是所需的依赖项列表: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-hive_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>3.1.2</version> </dependency> ``` 这些依赖项提供了 Flink 和 Hive 的集成支持[^2]。 --- #### 初始化 Hive Catalog Flink 提供了 `HiveCatalog` 类用于连接 Hive 元存储。以下是一个典型的初始化过程: ```java String name = "myhive"; String defaultDatabase = "default"; String hiveConfDir = "/path/to/hive/conf"; // 替换为实际路径 String version = "3.1.2"; HiveCatalog hiveCatalog = new HiveCatalog(name, defaultDatabase, hiveConfDir, version); tEnv.registerCatalog("myhive", hiveCatalog); // 设置默认目录和数据库 tEnv.useCatalog("myhive"); tEnv.useDatabase("db1"); // 设置 SQL 方言为 HIVE tEnv.getConfig().setSqlDialect(SqlDialect.HIVE); ``` 这段代码注册了一个名为 `myhive` 的 Hive 目录,并将其设置为当前环境的默认目录[^1]。 --- #### 定义 Kafka 数据源 假设输入数据来自 Kafka,则可以通过定义一个 Kafka 表来接收数据。以下是一个示例: ```sql CREATE TABLE kafka_source_table ( userId STRING, amount DOUBLE, ts TIMESTAMP(3), WATERMARK FOR ts AS ts - INTERVAL '5' SECOND -- 添加水印以处理乱序事件 ) WITH ( 'connector' = 'kafka', 'topic' = 'input_topic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'json' ); ``` 此表定义指定了 Kafka 连接器以及 JSON 格式的解析方式[^3]。 --- #### 插入数据到 Hive 表 一旦 Kafka 数据源准备就绪,就可以通过 SQL 查询将数据插入到目标 Hive 表中。例如: ```sql INSERT INTO db1.fs_table SELECT userId, amount, DATE_FORMAT(ts, 'yyyy-MM-dd') AS day, DATE_FORMAT(ts, 'HH') AS hour, DATE_FORMAT(ts, 'mm') AS minute FROM kafka_source_table; ``` 这条语句从 `kafka_source_table` 中提取数据,并按指定格式转换后插入到 Hive 表 `fs_table` 中。 --- #### 执行任务 最后一步是执行查询操作: ```java tEnv.executeSql(insertSql).print(); ``` 这将启动作业并将数据持续写入 Hive 表[^4]。 --- #### 自动创建 Hive 表(可选) 如果目标 Hive 表尚未存在,Flink 支持动态创建表。例如,在上述 INSERT 操作之前运行如下 DDL 命令即可: ```sql CREATE TABLE IF NOT EXISTS db1.fs_table ( userId STRING, amount DOUBLE, day STRING, hour STRING, minute STRING ) PARTITIONED BY (day) STORED AS PARQUET; ``` 这样可以确保即使表不存在也不会中断程[^5]。 --- ### 注意事项 1. **分区策略**:对于大规模数据集,建议合理设计分区字段以优化性能。 2. **文件格式**:推荐使用 Parquet 或 ORC 等列式存储格式提升压缩率和查询效率。 3. **资源管理**:确保集群有足够的计算资源应对实时写入需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值