The problem is actually with that processor. When I wrote it, I used a
naive approach to reading the records and turning them into Mongo Document
objects.

Now what COULD work is if I could use the "date" logical type to create an
Avro date that could return a java.util.Date object. Mongo's client API
will not have a problem with that.

I'll take this over to nifi-dev to see what others think.

Thanks.

On Wed, Oct 25, 2017 at 12:08 PM, Sean Busbey <bus...@cloudera.com> wrote:

> Shoot. my copying in the NiFi user list failed. Mike, if using the
> PutMongoRecord processor might work, the folks on that list are more likely
> to be able to help with edge cases.
>
> If you need the intermediate JSON for some reason, I think there's a JSON
> transforming processor that you could maybe use to rewrite the JSON records
> with the right field name?
>
> On Wed, Oct 25, 2017 at 11:05 AM, Sean Busbey <bus...@cloudera.com> wrote:
>
>> +us...@nifi.apache.org[1]
>>
>> Could you can keep the data in Avro and then use Nifi's PutMongoRecord
>> processor[2] with an AvroReader to insert?
>>
>>
>> [1]: https://lists.apache.org/list.html?us...@nifi.apache.org
>> [2]: https://s.apache.org/MmPG
>>
>> On Wed, Oct 25, 2017 at 7:51 AM, Mike Thomsen <mikerthom...@gmail.com>
>> wrote:
>>
>>> No, it doesn't look like it's going to work. It accepts $date into the
>>> record using the alias, but it doesn't generate $date as the field name
>>> when writing the object back to JSON.
>>>
>>> On Wed, Oct 25, 2017 at 8:19 AM, Nandor Kollar <nkol...@cloudera.com>
>>> wrote:
>>>
>>>> Oh yes, you're right, you face with the limitation of field names
>>>> <https://avro.apache.org/docs/1.8.0/spec.html#names>. Apart from
>>>> solving this via a map, you might consider using Avro aliases
>>>> <https://avro.apache.org/docs/1.8.2/spec.html#Aliases>, since looks
>>>> like aliases don't have this limitation, can you use them?
>>>>
>>>> Nandor
>>>>
>>>> On Wed, Oct 25, 2017 at 1:40 PM, Mike Thomsen <mikerthom...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Nandor,
>>>>>
>>>>> It's not the numeric portion that is the problem for me, but the $date
>>>>> field name. Mongo apparently requires the structure I provided in the
>>>>> example, and whenever I use $date as the field name the Java Avro API
>>>>> throws an exception about an invalid character in the field definition.
>>>>>
>>>>> The logical type thing is good to know for future reference.
>>>>>
>>>>> I admit that this is likely a really uncommon edge case for Avro. The
>>>>> work around I found for defining a schema that is at least compatible with
>>>>> the Mongo Extended JSON requirements was to do this (one field example):
>>>>>
>>>>> {
>>>>>     "namespace": "test",
>>>>>     "name": "PutTestRecord",
>>>>>     "type": "record",
>>>>>     "fields": [{
>>>>>         "name": "timestampField",
>>>>>         "type": {
>>>>>             "type": "map",
>>>>>             "values": "long"
>>>>>         }
>>>>>     }]
>>>>> }
>>>>>
>>>>> It doesn't give you the full validation that would be ideal if we
>>>>> could define a field with the name "$date," but it's an 80% solution that
>>>>> works with NiFi and other tools that have to generate Extended JSON for
>>>>> Mongo.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Mike
>>>>>
>>>>> On Wed, Oct 25, 2017 at 4:48 AM, Nandor Kollar <nkol...@cloudera.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Mike,
>>>>>>
>>>>>> This JSON doesn't seems like a valid Avro schema
>>>>>> <https://avro.apache.org/docs/1.8.1/spec.html#schemas>. If you'd
>>>>>> like to use timestamps in your schema, you should use Timestamp
>>>>>> logical types,
>>>>>> <https://avro.apache.org/docs/1.8.1/spec.html#Timestamp+%28millisecond+precision%29>
>>>>>> which annotate Avro longs. In this case the schema of this field should
>>>>>> look like this:
>>>>>>
>>>>>> {
>>>>>>    "name":"timestamp",
>>>>>>    "type":"long",
>>>>>>    "logicalType":"timestamp-millis"
>>>>>> }
>>>>>>
>>>>>> If you'd like to create Avro files with this schema, there's on Avro
>>>>>> wiki you can find a brief tutorial
>>>>>> <https://avro.apache.org/docs/1.8.1/gettingstartedjava.html#Compiling+the+schema>
>>>>>> how to create and write Avro files with this schema in Java.
>>>>>>
>>>>>> Regards,
>>>>>> Nandor
>>>>>>
>>>>>> On Tue, Oct 24, 2017 at 8:18 PM, Mike Thomsen <mikerthom...@gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> I am trying to build an avro schema for a NiFi flow that is going to
>>>>>>> insert data into Mongo, and Mongo extended JSON requires the use of $
>>>>>>> characters in cases like this (to represent a date):
>>>>>>>
>>>>>>> {
>>>>>>>     "timestamp": {
>>>>>>>         "$date": TIMESTAMP_LONG_HERE
>>>>>>>     }
>>>>>>> }
>>>>>>>
>>>>>>> I tried building a schema with that, and it failed saying there was
>>>>>>> an invalid character in the schema.  just wanted to check and see if 
>>>>>>> there
>>>>>>> was a work around for this or if I'll have to choose another option.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Mike
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>> --
>> busbey
>>
>
>
>
> --
> busbey
>

Reply via email to