You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@phoenix.apache.org by anil gupta <an...@gmail.com> on 2016/01/06 01:14:27 UTC
Phoenix MR integration api only accepts Index of column for setting
column value
Hi,
I am using Phoenix4.4. I am trying to integrate my MapReduce job with
Phoenix following this doc: https://phoenix.apache.org/phoenix_mr.html
My phoenix table has around 1000 columns. I have some hesitation regarding
using *COLUMN_INDEX* for setting its value rather than *NAME* as per
following example:
@Override
public void write(PreparedStatement pstmt) throws SQLException {
pstmt.setString(1, stockName);
pstmt.setDouble(2, maxPrice);
}
There are couple of problems with above:
1. What if someone deletes a column from table? My guess, It will change
index of some of the columns. Right?(Lets say, a table has 5 columns. 3rd
column of table is deleted.)
2. Readability of code is also less since column names are denoted by
numbers.(in reality it's a name/value pair)
Instead, if we have following API then it will be much easier and above
problems will be fixed:
@Override
public void write(PreparedStatement pstmt) throws SQLException {
pstmt.setString("STOCK_NAME", stockName);
pstmt.setDouble("MAX_RECORDING", maxPrice);
}
Also, my coding habits are giving me hard time to code on basis of
index when in reality its a key/value pair. :)
Is there anyway i can achieve the above? Would the community like to
have the key/value api?
--
Thanks & Regards,
Anil Gupta
Re: Phoenix MR integration api only accepts Index of column for
setting column value
Posted by anil gupta <an...@gmail.com>.
Yeah, i just read about Prepared statement of JDBC. 5 years of NoSql work
has made me a dummy when it comes RDBMS like SQL. :)
Thanks,
Anil
On Wed, Jan 6, 2016 at 9:58 PM, James Taylor <ja...@apache.org> wrote:
> My mistake - I was thinking of ResultSet.getString(String,String) and ResultSet.getString(int,String). PreparedStatement
> sets parameters based on the order you list the ? In your statement - they
> don't necessarily map to columns at all. These are all standard JDBC
> interfaces, not defined by Phoenix at all. FWIW, there are a lot of good
> online resources to learn about them.
>
> Thanks,
> James
>
> On Wednesday, January 6, 2016, anil gupta <an...@gmail.com> wrote:
>
>> Hi James,
>>
>> Maybe, i am missing your point. I dont see following method in
>> PreparedStatement interface:
>>
>> pstmt.setString("STOCK_NAME", stockName);
>>
>> Do i need to use some other stuff than Phoenix MR integration to get that method?
>>
>> Thanks,
>>
>> Anil Gupta
>>
>>
>>
>> On Tue, Jan 5, 2016 at 8:48 PM, James Taylor <ja...@apache.org>
>> wrote:
>>
>>> With JDBC, both will already work.
>>>
>>> pstmt.setString("STOCK_NAME", stockName);
>>>
>>> pstmt.setString(1, stockName);
>>>
>>>
>>> On Tuesday, January 5, 2016, anil gupta <an...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I am using Phoenix4.4. I am trying to integrate my MapReduce job with
>>>> Phoenix following this doc: https://phoenix.apache.org/phoenix_mr.html
>>>>
>>>>
>>>> My phoenix table has around 1000 columns. I have some hesitation
>>>> regarding using *COLUMN_INDEX* for setting its value rather than *NAME* as
>>>> per following example:
>>>>
>>>> @Override
>>>> public void write(PreparedStatement pstmt) throws SQLException {
>>>> pstmt.setString(1, stockName);
>>>> pstmt.setDouble(2, maxPrice);
>>>> }
>>>>
>>>> There are couple of problems with above:
>>>> 1. What if someone deletes a column from table? My guess, It will
>>>> change index of some of the columns. Right?(Lets say, a table has 5
>>>> columns. 3rd column of table is deleted.)
>>>> 2. Readability of code is also less since column names are denoted by
>>>> numbers.(in reality it's a name/value pair)
>>>>
>>>> Instead, if we have following API then it will be much easier and above
>>>> problems will be fixed:
>>>>
>>>> @Override
>>>> public void write(PreparedStatement pstmt) throws SQLException {
>>>> pstmt.setString("STOCK_NAME", stockName);
>>>> pstmt.setDouble("MAX_RECORDING", maxPrice);
>>>> }
>>>>
>>>> Also, my coding habits are giving me hard time to code on basis of index when in reality its a key/value pair. :)
>>>>
>>>> Is there anyway i can achieve the above? Would the community like to have the key/value api?
>>>>
>>>>
>>>> --
>>>> Thanks & Regards,
>>>> Anil Gupta
>>>>
>>>
>>
>>
>> --
>> Thanks & Regards,
>> Anil Gupta
>>
>
--
Thanks & Regards,
Anil Gupta
Re: Phoenix MR integration api only accepts Index of column for
setting column value
Posted by James Taylor <ja...@apache.org>.
My mistake - I was thinking of ResultSet.getString(String,String) and
ResultSet.getString(int,String). PreparedStatement
sets parameters based on the order you list the ? In your statement - they
don't necessarily map to columns at all. These are all standard JDBC
interfaces, not defined by Phoenix at all. FWIW, there are a lot of good
online resources to learn about them.
Thanks,
James
On Wednesday, January 6, 2016, anil gupta <an...@gmail.com> wrote:
> Hi James,
>
> Maybe, i am missing your point. I dont see following method in
> PreparedStatement interface:
>
> pstmt.setString("STOCK_NAME", stockName);
>
> Do i need to use some other stuff than Phoenix MR integration to get that method?
>
> Thanks,
>
> Anil Gupta
>
>
>
> On Tue, Jan 5, 2016 at 8:48 PM, James Taylor <jamestaylor@apache.org
> <javascript:_e(%7B%7D,'cvml','jamestaylor@apache.org');>> wrote:
>
>> With JDBC, both will already work.
>>
>> pstmt.setString("STOCK_NAME", stockName);
>>
>> pstmt.setString(1, stockName);
>>
>>
>> On Tuesday, January 5, 2016, anil gupta <anilgupta84@gmail.com
>> <javascript:_e(%7B%7D,'cvml','anilgupta84@gmail.com');>> wrote:
>>
>>> Hi,
>>>
>>> I am using Phoenix4.4. I am trying to integrate my MapReduce job with
>>> Phoenix following this doc: https://phoenix.apache.org/phoenix_mr.html
>>>
>>>
>>> My phoenix table has around 1000 columns. I have some hesitation
>>> regarding using *COLUMN_INDEX* for setting its value rather than *NAME* as
>>> per following example:
>>>
>>> @Override
>>> public void write(PreparedStatement pstmt) throws SQLException {
>>> pstmt.setString(1, stockName);
>>> pstmt.setDouble(2, maxPrice);
>>> }
>>>
>>> There are couple of problems with above:
>>> 1. What if someone deletes a column from table? My guess, It will change
>>> index of some of the columns. Right?(Lets say, a table has 5 columns. 3rd
>>> column of table is deleted.)
>>> 2. Readability of code is also less since column names are denoted by
>>> numbers.(in reality it's a name/value pair)
>>>
>>> Instead, if we have following API then it will be much easier and above
>>> problems will be fixed:
>>>
>>> @Override
>>> public void write(PreparedStatement pstmt) throws SQLException {
>>> pstmt.setString("STOCK_NAME", stockName);
>>> pstmt.setDouble("MAX_RECORDING", maxPrice);
>>> }
>>>
>>> Also, my coding habits are giving me hard time to code on basis of index when in reality its a key/value pair. :)
>>>
>>> Is there anyway i can achieve the above? Would the community like to have the key/value api?
>>>
>>>
>>> --
>>> Thanks & Regards,
>>> Anil Gupta
>>>
>>
>
>
> --
> Thanks & Regards,
> Anil Gupta
>
Re: Phoenix MR integration api only accepts Index of column for
setting column value
Posted by anil gupta <an...@gmail.com>.
Hi James,
Maybe, i am missing your point. I dont see following method in
PreparedStatement interface:
pstmt.setString("STOCK_NAME", stockName);
Do i need to use some other stuff than Phoenix MR integration to get
that method?
Thanks,
Anil Gupta
On Tue, Jan 5, 2016 at 8:48 PM, James Taylor <ja...@apache.org> wrote:
> With JDBC, both will already work.
>
> pstmt.setString("STOCK_NAME", stockName);
>
> pstmt.setString(1, stockName);
>
>
> On Tuesday, January 5, 2016, anil gupta <an...@gmail.com> wrote:
>
>> Hi,
>>
>> I am using Phoenix4.4. I am trying to integrate my MapReduce job with
>> Phoenix following this doc: https://phoenix.apache.org/phoenix_mr.html
>>
>>
>> My phoenix table has around 1000 columns. I have some hesitation
>> regarding using *COLUMN_INDEX* for setting its value rather than *NAME* as
>> per following example:
>>
>> @Override
>> public void write(PreparedStatement pstmt) throws SQLException {
>> pstmt.setString(1, stockName);
>> pstmt.setDouble(2, maxPrice);
>> }
>>
>> There are couple of problems with above:
>> 1. What if someone deletes a column from table? My guess, It will change
>> index of some of the columns. Right?(Lets say, a table has 5 columns. 3rd
>> column of table is deleted.)
>> 2. Readability of code is also less since column names are denoted by
>> numbers.(in reality it's a name/value pair)
>>
>> Instead, if we have following API then it will be much easier and above
>> problems will be fixed:
>>
>> @Override
>> public void write(PreparedStatement pstmt) throws SQLException {
>> pstmt.setString("STOCK_NAME", stockName);
>> pstmt.setDouble("MAX_RECORDING", maxPrice);
>> }
>>
>> Also, my coding habits are giving me hard time to code on basis of index when in reality its a key/value pair. :)
>>
>> Is there anyway i can achieve the above? Would the community like to have the key/value api?
>>
>>
>> --
>> Thanks & Regards,
>> Anil Gupta
>>
>
--
Thanks & Regards,
Anil Gupta
Re: Phoenix MR integration api only accepts Index of column for
setting column value
Posted by James Taylor <ja...@apache.org>.
With JDBC, both will already work.
pstmt.setString("STOCK_NAME", stockName);
pstmt.setString(1, stockName);
On Tuesday, January 5, 2016, anil gupta <an...@gmail.com> wrote:
> Hi,
>
> I am using Phoenix4.4. I am trying to integrate my MapReduce job with
> Phoenix following this doc: https://phoenix.apache.org/phoenix_mr.html
>
>
> My phoenix table has around 1000 columns. I have some hesitation regarding
> using *COLUMN_INDEX* for setting its value rather than *NAME* as per
> following example:
>
> @Override
> public void write(PreparedStatement pstmt) throws SQLException {
> pstmt.setString(1, stockName);
> pstmt.setDouble(2, maxPrice);
> }
>
> There are couple of problems with above:
> 1. What if someone deletes a column from table? My guess, It will change
> index of some of the columns. Right?(Lets say, a table has 5 columns. 3rd
> column of table is deleted.)
> 2. Readability of code is also less since column names are denoted by
> numbers.(in reality it's a name/value pair)
>
> Instead, if we have following API then it will be much easier and above
> problems will be fixed:
>
> @Override
> public void write(PreparedStatement pstmt) throws SQLException {
> pstmt.setString("STOCK_NAME", stockName);
> pstmt.setDouble("MAX_RECORDING", maxPrice);
> }
>
> Also, my coding habits are giving me hard time to code on basis of index when in reality its a key/value pair. :)
>
> Is there anyway i can achieve the above? Would the community like to have the key/value api?
>
>
> --
> Thanks & Regards,
> Anil Gupta
>