2 개의 열 패밀리를 포함하는 셸을 사용하여 Hbase에 테이블을 만들었습니다. Hbase 클라이언트 API를 사용하여이 API에 쓸 수 있습니다. 나는 그것에서 데이터를 쿼리 phoenix JDBC 드라이버를 사용하고 있습니다. 나는 HBase와 Phoenix 테이블 사이에 아무런 일대일 매핑이 없다는 것을 배웠다. 그래서, 난 내 기존 테이블에 대한 뷰를 생성하지만 난 내 코드를 실행할 때마다 내가Apache Phoenix create view가 TableAlreadyExistException을 던졌습니다.
org.apache.phoenix.schema.TableAlreadyExistsException: ERROR 1013 (42M04): Table already exists. tableName=test
at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1911)
at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:744)
at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:186)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:303)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:295)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:293)
at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1236)
at com.lam.app.PhoenixClient.main(PhoenixClient.java:49)
내 클라이언트 코드는이
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PhoenixClient
{
public static void main(String[] args)
{
// Create variables
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
PreparedStatement ps = null;
try
{
// Connect to the database
connection = DriverManager.getConnection("jdbc:phoenix:zkserver:2181:/hbase-unsecure");
// Create a JDBC statement
statement = connection.createStatement();
//HBase table schema - Table name : test, columnfamily 1 - data, ColumnFamily2 - context
// Execute our statements
statement.executeUpdate("CREATE VIEW \"test\" (pk VARCHAR not null PRIMARY KEY, "
+ "\"data\".\"mydata\" VARCHAR," + " \"context\".\"mycontext\" VARCHAR)");
//connection.commit();
// Query for table
/*ps = connection
.prepareStatement("select * from \"test\" WHERE \"mydata\" = \"names\"");
rs = ps.executeQuery();
System.out.println("Table Values");
while (rs.next())
{
Integer myKey = rs.getInt(1);
String myColumn = rs.getString(2);
System.out.println("\tRow: " + myKey + " = " + myColumn);
}*/
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if (ps != null)
{
try
{
ps.close();
}
catch (Exception e)
{
}
}
if (rs != null)
{
try
{
rs.close();
}
catch (Exception e)
{
}
}
if (statement != null)
{
try
{
statement.close();
}
catch (Exception e)
{
}
}
if (connection != null)
{
try
{
connection.close();
}
catch (Exception e)
{
}
}
}
}
}
내가 HBase를 쉘을 사용하여 테이블을 스캔 할 수 있고, 데이터를 볼 수 있습니다 같다 얻을 나는 테이블 이름이 대소 문자를 구별한다는 것을 알고있다. (특히 피닉스는 모든 것을 대문자로 만든다.) 왜 내가 뷰를 만들 수 없는지 확신 할 수 없다. 제발 도와주세요
오류로 인해 Hbase에 이미 "test"라는 테이블이 있습니다. 다른 이름을 부여하십시오 –
@NirmalRam Hbase 쉘을 사용하여 작성했기 때문에 "test"테이블이 이미 존재한다는 것을 알고 있습니다 만, 내가하려고하는 것은 Phoenix를 사용하여 쿼리를 사용할 수 있도록보기를 만드는 것입니다. – AnswerSeeker
보기를 만들기 전에보기를 삭제하려고 할 수 있습니까? –