public String startWriteJobParentTxn(String connStr, String tableName) { if (sqlUtil == null) sqlUtil = SMSQLUtil.getInstance(connStr); try { parentConn = sqlUtil.createConn(); sqlUtil.disableAutoCommit(parentConn); String txsId = sqlUtil.getTransactionID(parentConn); PreparedStatement ps = parentConn.prepareStatement("call SYSCS_UTIL.SYSCS_ELEVATE_TRANSACTION(?)"); ps.setString(1, tableName); ps.executeUpdate(); return txsId; } catch (SQLException e) { return null; } catch (InstantiationException e) { // TODO Auto-generated catch block return null; } catch (IllegalAccessException e) { // TODO Auto-generated catch block return null; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block return null; } }
public void configureTableJobProperties( TableDesc tableDesc, Map<String, String> jobProperties, boolean isInputJob) throws Exception { Properties tableProperties = tableDesc.getProperties(); String tableName = null; String connStr = tableProperties.getProperty(MRConstants.SPLICE_JDBC_STR); if (connStr == null) throw new Exception( "Error: wrong param. Did you mean '" + MRConstants.SPLICE_JDBC_STR + "'?"); // TODO JL if (sqlUtil == null) sqlUtil = SMSQLUtil.getInstance(connStr); if (isInputJob) { tableName = tableProperties.getProperty(MRConstants.SPLICE_TABLE_NAME); if (tableName == null) throw new Exception( "Error: wrong param. Did you mean '" + MRConstants.SPLICE_TABLE_NAME + "'?"); } else { tableName = tableProperties.getProperty(MRConstants.SPLICE_TABLE_NAME); if (tableName == null) throw new Exception( "Error: wrong param. Did you mean '" + MRConstants.SPLICE_TABLE_NAME + "'?"); } tableName = tableName.trim(); if (parentConn == null) { parentTxnId = startWriteJobParentTxn(connStr, tableName); } jobProperties.put(MRConstants.SPLICE_TRANSACTION_ID, parentTxnId); jobProperties.put(MRConstants.SPLICE_TABLE_NAME, tableName); jobProperties.put(MRConstants.SPLICE_JDBC_STR, connStr); }
@Override public void preCreateTable(Table tbl) throws MetaException { boolean isExternal = MetaStoreUtils.isExternalTable(tbl); if (isExternal) { Log.info("Creating External table for Splice..."); } String inputTableName = tbl.getParameters().get(MRConstants.SPLICE_TABLE_NAME); if (inputTableName == null) throw new MetaException( "Wrong param, you are missing " + MRConstants.SPLICE_TABLE_NAME + " ? "); // We can choose to support user define column mapping. // But currently I don't think it is necessary // We map all columns from Splice Table to Hive Table. String connStr = tbl.getParameters().get(MRConstants.SPLICE_JDBC_STR); if (connStr == null) throw new MetaException("Wrong param, did you mean " + MRConstants.SPLICE_JDBC_STR + " ? "); if (sqlUtil == null) sqlUtil = SMSQLUtil.getInstance(connStr); if (inputTableName != null) { inputTableName = inputTableName.trim(); checkTableExists(inputTableName); } }
private void checkTableExists(String tableName) throws MetaException { try { if (!sqlUtil.checkTableExists(tableName)) throw new MetaException( "Error in checkTableExists, " + "check Table Exists in Splice. " + "Now we only support creating External Table." + "Please create table in Splice first."); } catch (SQLException e) { throw new MetaException("Error in checkTableExists, " + "check Table Exists in Splice. " + e); } }