`

sqoop: truncate table prior export data from hdfs

 
阅读更多

We are using Sqoop to export data from the hive to SQL Server. The new data is always appended to the existing data in SQL Server.

Is it possible to truncate the SQL Server table via Sqoop before starting the export?

 

sqoop eval --connect 'jdbc:sqlserver://1.1.1.1;database=SomeDatabase;username=someUser;password=somePassword' --query "TRUNCATE TABLE some_table"

In hue, I create a sqoop action likes

<workflow-app name="inokmobile-delete-before-export" xmlns="uri:oozie:workflow:0.4">
    <start to="inokmobile-delete-before-export"/>
    <action name="inokmobile-delete-before-export">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
              <arg> eval</arg>
              <arg>--connect</arg>
              <arg>jdbc:mysql://192.168.10.200:3306/new_inoknok</arg>
              <arg>--username</arg>
              <arg>dba</arg>
              <arg>--password</arg>
              <arg>123456</arg>
              <arg>--query</arg>
              <arg>TRUNCATE TABLE  ${tablename}</arg>
        </sqoop>
        <ok to="end"/>
        <error to="kill"/>
    </action>
    <kill name="kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

 

The table is truncated correctly. But the job is killed due to erro

 IllegalArgumentException: JobId string : is not properly formed 

 

I thought the right way is to write a java procedure to execute this functionality.

 

package com.inoknok.mysql.tool;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class TruncateMysqlTable {
    private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
    private static final String sql_prefix = "TRUNCATE TABLE ";

    public static void main(String[] args) {
	int argsLength = args.length;

	if (argsLength < 4) {
	    System.out
		    .println("Please input parameters: url, user,password, tableTruncated");
	    System.exit(-1);

	}

	String url = args[0];
	String user = args[1];
	String password = args[2];

	List<String> tables = new ArrayList<String>();

	for (int i = 3; i < argsLength; i++) {
	    tables.add(args[i]);
	}

	try {
	    Class.forName(MYSQL_DRIVER);
	    Connection conn = DriverManager.getConnection(url, user, password);
	    if (!conn.isClosed()) {
		Statement statement = conn.createStatement();

		for (String table : tables) {
		    String sql = sql_prefix + table;
		    statement.execute(sql);
		}

		closeResources(conn, statement);
	    }
	} catch (Exception e) {
	    System.out.println("Fail to truncate table !");
	    e.printStackTrace();
	}
    }

    public static void closeResources(Connection conn, Statement pstmt,
	    ResultSet rs) {
	if (null != rs) {
	    try {
		rs.close();
	    } catch (SQLException e) {
		e.printStackTrace();
		throw new RuntimeException(e);
	    } finally {
		if (null != pstmt) {
		    try {
			pstmt.close();
		    } catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		    } finally {
			if (null != conn) {
			    try {
				conn.close();
			    } catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			    }
			}
		    }
		}
	    }
	}
    }

    public static void closeResources(Connection conn, Statement pstmt) {

	if (null != pstmt) {
	    try {
		pstmt.close();
	    } catch (SQLException e) {
		e.printStackTrace();
		throw new RuntimeException(e);
	    } finally {
		if (null != conn) {
		    try {
			conn.close();
		    } catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		    }
		}
	    }
	}
    }

}

 

 

 

References

http://stackoverflow.com/questions/15808257/sqoop-truncate-sql-server-table-before-exporting-data-from-hadoop

分享到:
评论

相关推荐

    sqoop-1.4.7.zip

    Sqoop是Apache Hadoop生态中的一个工具,用于在关系型数据库和Hadoop之间高效地导入导出数据。在这个场景中,我们遇到了一个关于Sqoop运行时的问题,即"找不到或无法加载主类 org.apache.sqoop.sqoop"。这个问题通常...

    sqoop-1.4.6.2.3.99.0-195.jar..zip

    编译Atlas用 sqoop-1.4.6.2.3.99.0-195.jar 内含安装jar包以及maven手动安装命令 详情可参考我的博客: https://blog.csdn.net/qq_26502245/article/details/108008070

    Atlas2.3.0依赖: org.restlet/sqoop-1.4.6.2.3.99.0-195

    在IT行业中,我们经常涉及到各种库和框架的集成与使用,这次我们关注的是"Atlas2.3.0"依赖的组件:"org.restlet/sqoop-1.4.6.2.3.99.0-195"。这个依赖包含了三个关键的JAR文件:`sqoop-1.4.6.2.3.99.0-195.jar`,`...

    sqoop-1.4.7.jar

    sqoop框架开发工具使用的jar sqoop-1.4.7.jar 手动安装到maven &lt;groupId&gt;org.apache.sqoop &lt;artifactId&gt;sqoop &lt;version&gt;1.4.7 &lt;/dependency&gt;

    docker-sqoop:Apache Sqoop Docker映像

    docker run -v /path/to/jdbc-jars:/jdbc -it dvoros/sqoop:latest MySQL导入示例 MYSQL_HOST= MYSQL_USER= MYSQL_PASS= MYSQL_DB= MYSQL_TABLE= sqoop import --connect jdbc:mysql://$MYSQL_HOST/$MYSQL_DB --...

    Hadoop-Sqoop-Oracle:使用Sqoop在Oracle数据库和HDFS之间进行导入和导出

    使用Sqoop在Oracle数据库和HDFS之间进行导入和导出 内容 使用 操作系统-Ubuntu 20.04.1 LTS(VMware) 后端-Java (JDK 1.8), Sqoop(v1.4.7) , Hadoop(v3.3.0) 库-OJDBC(v7),commons-lang-2.6.jar ...

    sqoop的操作

    sqoop是一种导入导出数据的工具,这里用思维导图的形式展现了sqoop的一些简单应用。

    sqoop:Apache Sqoop的镜像

    Sqoop允许在数据库和HDFS之间轻松导入和导出数据集。更多文件Sqoop附带其他文档:用户指南和手册页。 两者的asciidoc来源都在src/docs/ 。 运行ant docs以构建文档。 它将在build/docs/创建。 如果您以发布形式获得...

    sqoop jdbc驱动包

    sqoop 导入数据时候报错ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: oracle.jdbc.OracleDriver 缺少驱动包。

    Sqoop-sqlserver-hdfs.rar

    Sqoop是Apache Hadoop生态中的一个工具,专门用于在关系型数据库(如SQL Server)与Hadoop Distributed File System(HDFS)之间传输数据。在这个"Sqoop-sqlserver-hdfs.rar"压缩包中,我们有两个关键文件:sqljdbc....

    Sqoop将SQLServer数据表导入HDFS

    ### Sqoop将SQLServer数据表导入HDFS #### 一、引言 随着大数据技术的发展,数据集成成为了处理异构数据源的关键环节之一。Sqoop作为一款开源工具,旨在简化传统的关系型数据库(如SQL Server)与Hadoop生态系统...

    java-json.7z

    sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException,没遇到可以跳过 19/09/20 09:57:47 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException at org.json...

    java连接sqoop源码-quick-sqoop:ApacheSqoopETL工具的快速参考

    java连接sqoop源码Apache Sqoop 目录 #Getting Started下载并安装 Sqoop 注意:选择合适的版本,不要使用 sqoop2 因为它不是正式的 GA 并且可能永远不会 $ wget ...

    yinian_hive_increase_sqoop:sqoop从mysql同步数据到hive

    【标题】"yinian_hive_increase_sqoop:sqoop从mysql同步数据到hive" 描述了一种使用Apache Sqoop工具将数据从MySQL数据库高效地导入到Hadoop的Hive数据仓库的过程。这个过程在大数据处理中至关重要,因为它允许用户...

    Data Analytics with Hadoop: An Introduction for Data Scientists

    Use Sqoop and Apache Flume to ingest data from relational databases Program complex Hadoop and Spark applications with Apache Pig and Spark DataFrames Perform machine learning techniques such as ...

    sqoop学习文档(2){Sqoop import、Sqoop export}.docx

    Sqoop 的 `export` 功能用于将 HDFS 中的数据导出到 RDBMS。目标表必须预先存在于数据库中。 Sqoop 默认将 HDFS 文件解析为 INSERT 语句来更新数据库。在某些情况下,如更新模式,Sqoop 可能会生成 UPDATE 或 ...

    sqoop_export.zip

    Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,...

    sqoop2 java API从oracle导数据到HDFS开发总结

    ### sqoop2 Java API从Oracle导数据到HDFS开发总结 #### 整体说明与准备工作 本文档旨在帮助读者理解如何使用sqoop2的Java API将数据从Oracle数据库迁移至HDFS(Hadoop Distributed File System),同时分享了作者...

    sqoop导入数据到hdfs路径

    ### Sqoop导入数据到HDFS路径详解 #### 一、Sqoop简介 Sqoop是一款开源工具,主要用于在Hadoop和关系型数据库之间高效地传输大量数据。它利用MapReduce作业来提取、转换和加载(ETL)数据。通过Sqoop,用户可以从...

Global site tag (gtag.js) - Google Analytics