Переглянути джерело

Merge branch 'candidate-7.4.x' into candidate-7.6.x

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 5 роки тому
батько
коміт
040378f616
53 змінених файлів з 12979 додано та 752 видалено
  1. 15 17
      docs/EN_US/ECLLanguageReference/ECLR_mods/BltInFunc-WORKUNIT.xml
  2. 3 2
      docs/PT_BR/CMakeLists.txt
  3. 17 0
      docs/PT_BR/ConfiguringHPCC/CMakeLists.txt
  4. 2918 0
      docs/PT_BR/ConfiguringHPCC/ConfiguringHPCC.xml
  5. 5 0
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-AttributeTypes.xml
  6. 24 3
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml
  7. 68 57
      docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml
  8. 10 0
      docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml
  9. 6 6
      docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-OUTPUT.xml
  10. 8 0
      docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml
  11. 14 12
      docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml
  12. 6 1
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DATASET.xml
  13. 2 1
      docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml
  14. 1 1
      docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml
  15. 33 0
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml
  16. 70 27
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml
  17. 18 4
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EditDistance.xml
  18. 4 5
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml
  19. 11 0
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml
  20. 48 36
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml
  21. 11 0
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml
  22. 79 10
      docs/PT_BR/ECLWatch/ECLWa_mods/ECLWatchSrc.xml
  23. 11 0
      docs/PT_BR/ECLWatch/TheECLWatchMan.xml
  24. 17 0
      docs/PT_BR/HPCCSpark/CMakeLists.txt
  25. 951 0
      docs/PT_BR/HPCCSpark/SparkHPCC.xml
  26. 59 4
      docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml
  27. 2111 0
      docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml~
  28. 63 0
      docs/PT_BR/HPCCSystemAdmin/SA-Mods/DAFtslave.xml
  29. 351 0
      docs/PT_BR/HPCCSystemAdmin/SA-Mods/DaliLDAP.xml
  30. 163 0
      docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml
  31. 163 56
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/Hardware.xml
  32. 1 0
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStart.xml
  33. 1 0
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStop.xml
  34. 913 464
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml
  35. 92 0
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/anagram1.xml
  36. 642 0
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/anagram2.xml
  37. 2 0
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/hpcc_ldap.xml
  38. 4 8
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml
  39. 17 0
      docs/PT_BR/WsSQLUG/CMakeLists.txt
  40. 3902 0
      docs/PT_BR/WsSQLUG/WsSQL_ESPWebServiceGuide.xml
  41. 1 0
      ecl/hql/hqlexpr.cpp
  42. 2 7
      ecl/hql/hqlgram2.cpp
  43. 7 0
      ecl/hql/hqlutil.cpp
  44. 1 0
      ecl/hql/hqlutil.hpp
  45. 0 3
      ecl/hthor/hthor.cpp
  46. 20 0
      ecl/regress/issue22822.ecl
  47. 1 1
      esp/src/eclwatch/templates/GraphTree7Widget.html
  48. 1 1
      esp/src/src/WUScopeController.ts
  49. 5 2
      system/jlib/jptree.cpp
  50. 12 0
      testing/regress/ecl/key/translatefixed.xml
  51. 33 0
      testing/regress/ecl/translatefixed.ecl
  52. 0 14
      thorlcr/activities/diskread/thdiskreadslave.cpp
  53. 62 10
      thorlcr/master/thmastermain.cpp

+ 15 - 17
docs/EN_US/ECLLanguageReference/ECLR_mods/BltInFunc-WORKUNIT.xml

@@ -56,25 +56,23 @@
 
   <para>Example:</para>
 
-  <programlisting>  wuid := WORKUNIT //get WUID
-  
-  namesRecord := RECORD
+  <programlisting>wuid := WORKUNIT; //get WUID
+ 
+namesRecord := RECORD
   STRING20 surname;
   STRING10 forename;
   INTEGER2 age;
-  END;
-  
-  namesTable := DATASET([
-  {'Halligan','Kevin',31},
-  {'Halligan','Liz',30},
-  {'Salter','Abi',10},
-  {'X','Z'}], namesRecord);
-  
-  DISTRIBUTION(namesTable, surname, forename,
-          NAMED('Stats'));
-  x := DATASET(ROW(TRANSFORM({STRING line},
-  SELF.line := WORKUNIT('Stats', STRING))));
-</programlisting>
+END;
 
-  <para>See Also: <link linkend="_WORKUNIT">#WORKUNIT</link>, <link linkend="OUTPUT">OUTPUT</link>, <link linkend="DISTRIBUTION">DISTRIBUTION</link></para>
+namesTable := DATASET([{'Halligan','Kevin',31},
+                       {'Halligan','Liz',30},
+                       {'Salter','Abi',10},
+                       {'X','Z',42}], namesRecord);
+ 
+DISTRIBUTION(namesTable, surname, forename,NAMED('Stats'));
+WORKUNIT('Stats',STRING);</programlisting>
+
+  <para>See Also: <link linkend="_WORKUNIT">#WORKUNIT</link>, <link
+  linkend="OUTPUT">OUTPUT</link>, <link
+  linkend="DISTRIBUTION">DISTRIBUTION</link></para>
 </sect1>

+ 3 - 2
docs/PT_BR/CMakeLists.txt

@@ -72,7 +72,7 @@ add_subdirectory(HPCCDataHandling)
 add_subdirectory(HPCCDataTutorial)
 add_subdirectory(HPCCMonitoring)
 add_subdirectory(HPCCSystemAdmin)
-##7.2#add_subdirectory(HPCCSpark)
+add_subdirectory(HPCCSpark)
 add_subdirectory(IMDB)
 add_subdirectory(InstantCloud)
 add_subdirectory(Installing_and_RunningTheHPCCPlatform)
@@ -83,7 +83,8 @@ add_subdirectory(RunningHPCCinaVirtualMachine)
 add_subdirectory(ECLScheduler)
 add_subdirectory(ECLWatch)
 add_subdirectory(VisualizingECL)
-##7.2#add_subdirectory(WsSQLUG)
+#9/16
+add_subdirectory(WsSQLUG)
 #add_subdirectory(PortalHTML)
 
 

+ 17 - 0
docs/PT_BR/ConfiguringHPCC/CMakeLists.txt

@@ -0,0 +1,17 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+################################################################################
+get_filename_component(DOC_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../BuildTools/cmake_config/${DOC_DIR_NAME}.txt)

Різницю між файлами не показано, бо вона завелика
+ 2918 - 0
docs/PT_BR/ConfiguringHPCC/ConfiguringHPCC.xml


+ 5 - 0
docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-AttributeTypes.xml

@@ -105,6 +105,11 @@ SetFloridaCities := ['Orlando', StateCapitol('FL'), 'Boca '+'Raton',
     parâmetros de entrada.</para>
 
     <programlisting>SetDS := [ds1, ds2, ds3]; // a set of datasets</programlisting>
+
+    <para>Você pode construir um DATASET a partir from a SET.</para>
+
+    <programlisting>SET OF STRING s := ['Jim','Bob','Richard','Tom'];
+DATASET(s,{STRING txt});</programlisting>
   </sect2>
 
   <sect2 id="Set_Ordering_and_Indexing">

+ 24 - 3
docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml

@@ -113,7 +113,6 @@ MyUnicodeString3 := U'abcd\u00EB'; // becomes 'abcdë'</programlisting>
     <para><emphasis role="bold">As constantes de string VARSTRING <indexterm>
         <primary>VARSTRING string constants</primary>
       </indexterm> </emphasis> devem começar com um caractere "V". O byte nulo
-    de finalização é implícito e o tipo da constante é VARSTRING. O byte nulo
     de finalização é implícito e o tipo da constante é VARSTRING.</para>
 
     <programlisting>MyVarString := V'abcd'; // same as: (VARSTRING)'abcd'</programlisting>
@@ -212,7 +211,8 @@ MyReal2 := 1.0e1;  // value of MyReal2 is the REAL value 10.0
                 </indexterm></emphasis></entry>
 
               <entry>Uma STRING indicando o sistema operacional de destino da
-              compilação. (Valores disponíveis: 'windows" ou "linux')</entry>
+              compilação. Os valores possíveis são: 'Windows', 'MacOS', ou
+              'linux' .</entry>
             </row>
 
             <row>
@@ -223,6 +223,27 @@ MyReal2 := 1.0e1;  // value of MyReal2 is the REAL value 10.0
               <entry>Um valor BOOLEAN indicando se a compilação gerará um
               executável autônomo.</entry>
             </row>
+
+            <row>
+              <entry><emphasis> __TARGET_PLATFORM__<indexterm>
+                  <primary>__TARGET_PLATFORM__</primary>
+                </indexterm></emphasis></entry>
+
+              <entry>Uma STRING contendo o valor da plataforma de destino (o
+                             tipo de cluster em que a consulta foi submetida).
+              Os valores possíveis                são: 'roxie', 'hthor' ,
+              'thor', or 'thorlcr'.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis> __PLATFORM__<indexterm>
+                  <primary>__PLATFORM__</primary>
+                </indexterm></emphasis></entry>
+
+              <entry>Uma STRING contendo o valor da plataforma em que a
+                             consulta será executada. Os valores possíveis
+              são: 'roxie', 'hthor' , 'thor', or 'thorlcr'.</entry>
+            </row>
           </tbody>
         </tgroup>
       </informaltable>Exemplo:</para>
@@ -242,7 +263,7 @@ MyReal2 := 1.0e1;  // value of MyReal2 is the REAL value 10.0
       time(&amp;timeinsecs);  
       localtime_r(&amp;timeinsecs,&amp;localt);
       char temp[15];
-      strftime(temp , 15, "%Y%m%d%H%M%S", &amp;amp;localt); 
+      strftime(temp , 15, "%Y%m%d%H%M%S", &amp;localt); 
       // Formats the localtime to YYYYMMDDhhmmss 
       strncpy(__result, temp, 14);
       ENDC++;

+ 68 - 57
docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml

@@ -178,34 +178,42 @@
     <para>Exemplo:</para>
 
     <programlisting>inrec := RECORD
-  UNSIGNED6 did;
+  UNSIGNED6 uid;
 END;
 outrec := RECORD(inrec)
   STRING20  name;
-  STRING10  ssn;
+  STRING11  ssn;
   UNSIGNED8  dob;
 END;
 ds := DATASET([1,2,3,4,5,6], inrec);
-i1 := DATASET([{1, 'Kevin'}, {2, 'Richard'}, {5,'Nigel'}],
-    { UNSIGNED6 did, STRING10 name });
-i2 := DATASET([{3, '123462'}, {5, '1287234'}, {6,'007001002'}],
-    { UNSIGNED6 did, STRING10 ssn });
-i3 := DATASET([{1, 19700117}, {4, 19831212}, {6,20000101}],
-    { UNSIGNED6 did, UNSIGNED8 dob}); 
-j1 := JOIN(ds, i1, LEFT.did = RIGHT.did, LEFT OUTER, LOOKUP);
-j2 := JOIN(ds, i2, LEFT.did = RIGHT.did, LEFT OUTER, LOOKUP);
-j3 := JOIN(ds, i3, LEFT.did = RIGHT.did, LEFT OUTER, LOOKUP);
-combined1 := COMBINE(j1, 
-                     j2,   
+i1 := DATASET([ {1, 'Kevin'}, 
+			 {2, 'Richard'}, 
+			 {5,'Nigel'}],
+              {UNSIGNED6 udid, STRING10 name });
+i2 := DATASET([ {3, '000-12-3462'}, 
+                {5, '000-12-8723'}, 
+                {6, '000-10-1002'}],
+              {UNSIGNED6 udid, STRING10 ssn });
+i3 := DATASET([ {1, 19700117},
+			 {4, 19831212}, 
+                {6, 20010101}],
+    			{UNSIGNED6 udid, UNSIGNED8 dob}); 
+j1 := JOIN(ds, i1, LEFT.udid = RIGHT.udid, LEFT OUTER, LOOKUP);
+j2 := JOIN(ds, i2, LEFT.udid = RIGHT.udid, LEFT OUTER, LOOKUP);
+j3 := JOIN(ds, i3, LEFT.udid = RIGHT.udid, LEFT OUTER, LOOKUP);
+combined1 := COMBINE(j1, j2,   
              TRANSFORM(outRec,
-      SELF := LEFT;
-      SELF := RIGHT;
-      SELF := []));
-combined2 := COMBINE(combined1,
-                   j3,
+      			   SELF := LEFT;
+      			   SELF := RIGHT;
+      			   SELF := []));
+		   LOCAL);
+combined2 := COMBINE(combined1, j3,
              TRANSFORM(outRec,
-      SELF.dob := RIGHT.dob;
-      SELF := LEFT));
+      			   SELF.dob := RIGHT.dob;
+            		   SELF := LEFT)),
+		   LOCAL);
+OUTPUT(combined1);
+OUTPUT(combined2);
 </programlisting>
   </sect2>
 
@@ -223,7 +231,7 @@ combined2 := COMBINE(combined1,
 
     <para>Exemplo:</para>
 
-    <programlisting>inrec := {UNSIGNED6 did};
+    <programlisting>inrec := {UNSIGNED6 udid};
 outrec := RECORD(inrec)
   STRING20 name;
   UNSIGNED score;
@@ -237,52 +245,55 @@ resultRec := RECORD(inrec)
 END;
 ds := DATASET([1,2,3,4,5,6], inrec);
 dsg := GROUP(ds, ROW);
-i1 := DATASET([ {1, 'Kevin', 10},
-   {2, 'Richard', 5},
-   {5,'Nigel', 2},
-   {0, '', 0} ], outrec);
-i2 := DATASET([ {1, 'Kevin Halligan', 12},
-   {2, 'Richard Chapman', 15},
-   {3, 'Jake Smith', 20},
-   {5,'Nigel Hicks', 100},
-   {0, '', 0} ], outrec);
+i1 := DATASET([{1, 'Kevin'  ,10},
+               {2, 'Richard', 5},
+               {5, 'Nigel'  , 2},
+               {0, ''       , 0} ], outrec);
+i2 := DATASET([{1, 'Kevin Hall',      12},
+               {2, 'Richard Chapman', 15},
+               {3, 'Jake Smith',      20},
+               {5, 'Nigel Hicks',    100},
+               {0, ''          ,       0} ], outrec);
 i3 := DATASET([ {1, 'Halligan', 8},
-   {2, 'Richard', 8},
-   {6, 'Pete', 4},
-   {6, 'Peter', 8},
-   {6, 'Petie', 1},
-   {0, '', 0} ], outrec);
-j1 := JOIN( dsg,
-  i1,
-  LEFT.did = RIGHT.did,
-  TRANSFORM(outrec, SELF := LEFT; SELF := RIGHT),
-  LEFT OUTER, MANY LOOKUP);
-j2 := JOIN( dsg,
-  i2,
-  LEFT.did = RIGHT.did,
-  TRANSFORM(outrec, SELF := LEFT; SELF := RIGHT),
-  LEFT OUTER,
-  MANY LOOKUP);
-j3 := JOIN( dsg,
-  i3,
-  LEFT.did = RIGHT.did,
-  TRANSFORM(outrec, SELF := LEFT; SELF := RIGHT),
-  LEFT OUTER,
-  MANY LOOKUP);
+                {2, 'Richard',  8},
+                {6, 'Pete',     4},
+                {6, 'Peter',    8},
+                {6, 'Petie',    1},
+                {0, '',         0} ], outrec);
+j1 := JOIN(dsg,i1,
+           LEFT.uid = RIGHT.uid,
+           TRANSFORM(outrec, 
+                     SELF := LEFT; 
+                     SELF := RIGHT),
+           LEFT OUTER, MANY LOOKUP);
+j2 := JOIN(dsg,i2,
+           LEFT.uid = RIGHT.uid,
+           TRANSFORM(outrec, 
+                     SELF := LEFT; 
+                     SELF := RIGHT), 
+           LEFT OUTER, MANY LOOKUP);
+j3 := JOIN(dsg,i3,
+           LEFT.uid = RIGHT.uid,
+           TRANSFORM(outrec, 
+                     SELF := LEFT; 
+                     SELF := RIGHT), 
+           LEFT OUTER, MANY LOOKUP);
 combined := REGROUP(j1, j2, j3);
 resultRec t(inrec l, DATASET(RECORDOF(combined)) r) := TRANSFORM
- self.names := PROJECT(r, TRANSFORM(nameRec, SELF := LEFT));
- self := l;
+ SELF.names := PROJECT(r, TRANSFORM(nameRec, SELF := LEFT));
+ SELF := l;
  END;
-res1 := COMBINE(dsg,combined,GROUP,t(LEFT, ROWS(RIGHT)(score != 0)));
+res1 := COMBINE(dsg,combined,GROUP,t(LEFT, ROWS(RIGHT)(score != 0)),LOCAL);
+OUPUT(res1);
+
 //A variation using rows in a child query.
 resultRec t2(inrec l, DATASET(RECORDOF(combined)) r) := TRANSFORM
  SELF.names := PROJECT(SORT(r, -score),
         TRANSFORM(nameRec, SELF := LEFT));
  SELF := l;
  END;
-res2 := COMBINE(dsg,combined,GROUP,t2(LEFT,ROWS(RIGHT)(score != 0)));
-</programlisting>
+res2 := COMBINE(dsg,combined,GROUP,t2(LEFT,ROWS(RIGHT)(score != 0)),LOCAL);
+OUPUT(res2);</programlisting>
 
     <para>Ver também: <link linkend="GROUP">GROUP</link>, <link
     linkend="REGROUP">REGROUP</link></para>

+ 10 - 0
docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml

@@ -726,6 +726,16 @@
     <para>A <emphasis>joincondition</emphasis>, LIMIT e ATMOST determinam como
     isso é feito.</para>
 
+    <para>Um limite implícito de 10000 é adicionado quando não há LIMIT
+    especificado <emphasis role="bold">E</emphasis> o seguinte é
+    verdadeiro:</para>
+
+    <para>Não há limite especificado para ATMOST <emphasis
+    role="bold">E</emphasis> e não é um LEFT ONLY JOIN <emphasis
+    role="bold">E</emphasis> <emphasis role="bold">(</emphasis>ou nenhum
+    limite KEEP especificado OU o JOIN que tem um postfilter<emphasis
+    role="bold">)</emphasis>.</para>
+
     <para><emphasis role="bold">3. Determina quais correspondências devem ser
     especificadas para </emphasis><emphasis
     role="bold">transform</emphasis><emphasis role="bold">.</emphasis></para>

+ 6 - 6
docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-OUTPUT.xml

@@ -23,8 +23,8 @@
   </emphasis><emphasis role="bold">) ] ] [, ALGORITHM(</emphasis>
   <emphasis>name </emphasis><emphasis role="bold">) ] );</emphasis></para>
 
-  <para><emphasis role="bold">[</emphasis><emphasis>attr</emphasis>
-  :=<emphasis role="bold"> ]
+  <para role="systax"><emphasis
+  role="bold">[</emphasis><emphasis>attr</emphasis> :=<emphasis role="bold"> ]
   OUTPUT(</emphasis><emphasis>recordset</emphasis><emphasis role="bold">,
   [</emphasis><emphasis> format </emphasis><emphasis
   role="bold">]</emphasis><emphasis> ,file
@@ -41,8 +41,8 @@
   role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name
   </emphasis><emphasis role="bold">) ] );</emphasis></para>
 
-  <para><emphasis role="bold">[</emphasis><emphasis>attr</emphasis>
-  :=<emphasis role="bold"> ]
+  <para role="systax"><emphasis
+  role="bold">[</emphasis><emphasis>attr</emphasis> :=<emphasis role="bold"> ]
   OUTPUT(</emphasis><emphasis>recordset</emphasis><emphasis role="bold">,
   [</emphasis><emphasis> format </emphasis><emphasis
   role="bold">]</emphasis><emphasis> , file </emphasis><emphasis role="bold">
@@ -59,8 +59,8 @@
   role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name
   </emphasis><emphasis role="bold">) ] );</emphasis></para>
 
-  <para><emphasis role="bold">[</emphasis><emphasis>attr</emphasis>
-  :=<emphasis role="bold"> ]
+  <para role="systax"><emphasis
+  role="bold">[</emphasis><emphasis>attr</emphasis> :=<emphasis role="bold"> ]
   OUTPUT(</emphasis><emphasis>recordset</emphasis><emphasis role="bold">,
   [</emphasis><emphasis> format </emphasis><emphasis
   role="bold">]</emphasis><emphasis> , file </emphasis><emphasis role="bold">

+ 8 - 0
docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml

@@ -133,6 +133,14 @@
   qual o valor "myField" é um dos valores "someField" de "anotherDataset", mas
   o código possui uma execução bem mais eficiente.</para>
 
+  <para>Você pode construir um DATASET a partir de um SET.</para>
+
+  <programlisting>ds := DATASET([{'X',1},{'B',3},{'C',2},{'B',5},
+               {'C',4},{'D',6},{'E',2}],
+              {STRING1 Ltr, INTEGER1 Val});
+s1 := SET(ds,Ltr);          //a SET of just the Ltr field values:
+DATASET(s1,{STRING1 Ltr});  //a DATASET from the SET</programlisting>
+
   <para>Exemplo:</para>
 
   <programlisting>ds := DATASET([{'X',1},{'B',3},{'C',2},{'B',5},

+ 14 - 12
docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml

@@ -88,16 +88,16 @@
 
             <entry>Uma estrutura RECORD que contém as definições do campo de
             entrada a partir das quais a entrada XML é construída para o
-            serviço SOAP . O nome das tags no XML são derivados dos nomes dos
-            campos no registro de entrada; isso pode ser substituído ao
-            colocar um xpath no campo ( {xpath('tagname')} – consulte a seção
-            Suporte ao XPATH na discussão sobre Estrutura RECORD). Se o
-            parâmetro <emphasis>recset</emphasis> não estiver presente, cada
-            definição de campo deve conter um valor padrão que constituirá o
-            registro de entrada individual. Se o parâmetro <emphasis>recset
-            </emphasis> estiver presente, cada definição de campo deve conter
-            um valor padrão, a menos que transform também esteja especificada
-            para fornecer valores de dados.</entry>
+            serviço SOAP . O nome das tags no XML são derivados dos nomes em
+            minúsculas dos campos no registro de entrada; isso pode ser
+            substituído             colocando um xpath no campo ({xpath
+            ('tagname')} - veja a seção XPATH Support da discussão RECORD
+            Structure). Se o parâmetro <emphasis>recset</emphasis> não estiver
+            presente, cada definição de campo deve conter um valor padrão que
+            constituirá o registro de entrada individual. Se o parâmetro
+            <emphasis>recset </emphasis> estiver presente, cada definição de
+            campo deve conter um valor padrão, a menos que transform também
+            esteja especificada para fornecer valores de dados.</entry>
           </row>
 
           <row>
@@ -405,8 +405,10 @@
                 <primary>HTTPHEADER</primary>
               </indexterm></emphasis></entry>
 
-            <entry>Refere-se às informações de cabeçalho a serem especificadas
-            para o serviço.</entry>
+            <entry>Especifica as informações do cabeçalho a serem passadas
+            para o serviço.              SOAPCALL suporta múltiplas instâncias
+            da opção HTTPHEADER se              você precisa especificar
+            várias strings de chave/valor de cabeçalho.</entry>
           </row>
         </tbody>
       </tgroup>

+ 6 - 1
docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DATASET.xml

@@ -1193,7 +1193,12 @@ T2(IDtype idval,FMtype fname,FMtype mname, Ltype lname ) :=
             SELF.lastname := lname);
 ds := DATASET([T1(123,'Fred','Jones'),
                T2(456,'John','Q','Public'),
-               T1(789,'Susie','Smith')]);</programlisting>
+               T1(789,'Susie','Smith')]);
+               
+// You can construct a DATASET from a SET.
+SET OF STRING s := ['Jim','Bob','Richard','Tom'];
+DATASET(s,{STRING txt});
+</programlisting>
   </sect2>
 
   <sect2 id="Single-row_DATASET_Expressions">

+ 2 - 1
docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml

@@ -357,9 +357,10 @@ STREAMED DATASET(out1Rec) extractResult3(doneRec done) := BEGINC++
         }
         virtual void stop() {}
     private:
+	   Linked&lt;IEngineRowAllocator&gt; allocator;
         unsigned id;
         unsigned idx;
-        Linked&lt;IEngineRowAllocator&gt; allocator;
+        
     };
     #body
     const unsigned id = *(unsigned *)done;

+ 1 - 1
docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml

@@ -144,7 +144,7 @@ InRec  := {HeaderRec AND NOT [RecID,Address,Zip]};
 
 //this MODULE creates a concrete instance
 BatchHeaderSearch(InRec l) := MODULE(IHeaderFileSearch)
-  EXPORT STRING120 company_val := l.company;
+  EXPORT STRING20 company_val := l.company;
   EXPORT STRING2 state_val := l.state;
   EXPORT STRING25 city_val := l.city;
 END;

+ 33 - 0
docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml

@@ -632,6 +632,39 @@
               arquivo no tempo de compilação</emphasis> no <emphasis>Guia do
               Programador</emphasis> para obter mais detalhes.</entry>
             </row>
+
+            <row>
+              <entry><emphasis>timeLimit</emphasis></entry>
+
+              <entry/>
+
+              <entry>Para consultas Roxie. Tempo máximo de execução (em ms)
+              para um                consultas.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>generateGlobalId</emphasis></entry>
+
+              <entry>Padrão = false</entry>
+
+              <entry>Para consultas de Roxie. Quando true, gera um único
+              GlobalId                se um não é fornecido.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>analyzeWorkunit</emphasis></entry>
+
+              <entry/>
+
+              <entry>Substitui a configuração no ECL Agent para analisar as
+              workunits               depois que as consultas ECL são
+              executadas (somente Thor). Isso permite que a workunit seja
+              analisada para identificar e exibir potenciais
+                            problemas. Estes possíveis problemas são exibidos
+              na área do ECL Watch               "Warnings &amp; Errors". A
+              configuração global é padronizada para               TRUE, mas
+              pode ser alterado usando o Configuration Manager.</entry>
+            </row>
           </tbody>
         </tgroup>
       </informaltable></para>

Різницю між файлами не показано, бо вона завелика
+ 70 - 27
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml


+ 18 - 4
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EditDistance.xml

@@ -10,15 +10,15 @@
       <primary>Str.EditDistance</primary>
     </indexterm><indexterm>
       <primary>EditDistance</primary>
-    </indexterm>(</emphasis> <emphasis>string1, string2</emphasis> <emphasis
-  role="bold">)</emphasis></para>
+    </indexterm>(</emphasis> <emphasis>string1, string2, radius</emphasis>
+  <emphasis role="bold">)</emphasis></para>
 
   <para><emphasis role="bold">STD.Uni.EditDistance<indexterm>
       <primary>STD.Uni.EditDistance</primary>
     </indexterm><indexterm>
       <primary>Uni.EditDistance</primary>
-    </indexterm>(</emphasis> <emphasis>string1, string2, locale</emphasis>
-  <emphasis role="bold">)</emphasis></para>
+    </indexterm>(</emphasis> <emphasis>string1, string2, locale,
+  radius</emphasis> <emphasis role="bold">)</emphasis></para>
 
   <informaltable colsep="1" frame="all" rowsep="1">
     <tgroup cols="2">
@@ -50,6 +50,13 @@
         </row>
 
         <row>
+          <entry><emphasis>radius</emphasis></entry>
+
+          <entry>Opcional. O máximo aceitável para distance editável, ou 0
+          para sem limite. Padrão é 0.</entry>
+        </row>
+
+        <row>
           <entry>Return:<emphasis> </emphasis></entry>
 
           <entry>EditDistance retorna um valor UNSIGNED4.</entry>
@@ -65,11 +72,18 @@
   transformar <emphasis>string1</emphasis> em
   <emphasis>string2</emphasis>.</para>
 
+  <para>Se a distância de edição for maior que o <emphasis>raio</emphasis>   
+  retornará um valor arbitrário &gt; <emphasis>raio</emphasis>, mas pode   
+  não ser exato. Isso permite que a função termine mais rapidamente se as
+  strings    são significativamente diferentes.</para>
+
   <para>Exemplo:</para>
 
   <programlisting format="linespecific">STD.Str.EditDistance('CAT','CAT');  //returns 0
 STD.Str.EditDistance('CAT','BAT');  //returns 1
 STD.Str.EditDistance('BAT','BAIT'); //returns 1
 STD.Str.EditDistance('CAT','BAIT'); //returns 2
+STD.Str.EditDistance('CARTMAN','BATMAN');   //returns 2
+STD.Str.EditDistance('CARTMAN','BATMAN',1); //returns arbitrary number &gt; 1
 </programlisting>
 </sect1>

+ 4 - 5
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml

@@ -12,7 +12,7 @@
       <primary>RemoteDirectory</primary>
     </indexterm>(</emphasis> <emphasis> machineIP, directory </emphasis>
   <emphasis role="bold">[</emphasis> <emphasis>, mask </emphasis> <emphasis
-  role="bold">][</emphasis> <emphasis>, includesubs </emphasis> <emphasis
+  role="bold">][</emphasis> <emphasis>, recurse </emphasis> <emphasis
   role="bold">]</emphasis> <emphasis> </emphasis> <emphasis
   role="bold">)</emphasis></para>
 
@@ -47,7 +47,7 @@
         </row>
 
         <row>
-          <entry><emphasis>includesubdir</emphasis></entry>
+          <entry><emphasis>recurse</emphasis></entry>
 
           <entry>Opcional. Um indicador booleano que sinaliza se é necessário
           incluir arquivos dos subdiretórios abaixo do
@@ -73,9 +73,8 @@ END;</programlisting>
   <para>A função <emphasis role="bold">RemoteDirectory </emphasis> retorna uma
   lista de arquivos como um dataset no formato listado acima para o
   <emphasis>machineIP</emphasis> e o <emphasis>diretório</emphasis>
-  especificados. Se <emphasis>includesubdir</emphasis> for definido como TRUE,
-  o campo de nome conterá o caminho relativo para o arquivo no dir
-  <emphasis>etório</emphasis> especificado.</para>
+  especificados. Se <emphasis>recurse</emphasis> for definido como TRUE, o
+  nome do campo conterá o caminho relativo para o arquivo especificado.</para>
 
   <para>Exemplo:</para>
 

+ 11 - 0
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml

@@ -25,6 +25,8 @@
   role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
   role="bold">] </emphasis>,<emphasis
   role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <para><emphasis>dfuwuid</emphasis> <emphasis role="bold"> :=
@@ -49,6 +51,8 @@
   role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
   role="bold">]</emphasis>, <emphasis
   role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <informaltable colsep="1" frame="all" rowsep="1">
@@ -160,6 +164,13 @@
         </row>
 
         <row>
+          <entry><emphasis>dfuServerQueue</emphasis></entry>
+
+          <entry>Nome do Servidor DFU de destino. O padrão é '' (empty) para o
+          primeiro na fila de DFU no ambiente.</entry>
+        </row>
+
+        <row>
           <entry><emphasis>dfuwuid</emphasis></entry>
 
           <entry>O nome do atributo que receberá a string terminada por nulo

+ 48 - 36
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml

@@ -13,33 +13,36 @@
     </indexterm><indexterm>
       <primary>SprayDelimited</primary>
     </indexterm>(</emphasis> <emphasis> sourceIP </emphasis> <emphasis
-  role="bold">, </emphasis> <emphasis>sourcepath , </emphasis> <emphasis
-  role="bold">[</emphasis> <emphasis> maxrecordsize </emphasis> <emphasis
+  role="bold">, </emphasis> <emphasis>sourcePath , </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> sourceMaxRecordSize </emphasis>
+  <emphasis role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
+  role="bold"> [</emphasis> <emphasis> sourceCsvSeparate </emphasis> <emphasis
+  role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> sourceCsvTerminate </emphasis> <emphasis
+  role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> sourceCsvQuote </emphasis> <emphasis
   role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis role="bold">
-  [</emphasis> <emphasis> srcCSVseparator </emphasis> <emphasis role="bold">]
-  </emphasis> <emphasis>, </emphasis> <emphasis role="bold">[</emphasis>
-  <emphasis> srcCSVterminator </emphasis> <emphasis role="bold">] </emphasis>
-  <emphasis>, </emphasis> <emphasis role="bold">[</emphasis> <emphasis>
-  srcCSVquote </emphasis> <emphasis role="bold">] </emphasis> <emphasis>,
-  </emphasis> <emphasis role="bold"> </emphasis> <emphasis>destinationgroup,
-  destinationlogicalname </emphasis>, <emphasis role="bold">[</emphasis>
-  <emphasis>timeout</emphasis> <emphasis role="bold">]</emphasis> ,<emphasis
-  role="bold"> [</emphasis> <emphasis>espserverIPport</emphasis> <emphasis
-  role="bold">]</emphasis> ,<emphasis> </emphasis> <emphasis
-  role="bold">[</emphasis> <emphasis>maxConnections</emphasis> <emphasis
+  </emphasis> <emphasis>destinationGroup, destinationLogicalName </emphasis>,
+  <emphasis role="bold">[</emphasis> <emphasis>timeout</emphasis> <emphasis
   role="bold">]</emphasis> ,<emphasis role="bold"> [</emphasis>
-  <emphasis>allowoverwrite</emphasis> <emphasis role="bold">] , [</emphasis>
-  <emphasis>replicate</emphasis> <emphasis role="bold">] , [</emphasis>
-  <emphasis> compress </emphasis><emphasis role="bold">]</emphasis> ,
-  <emphasis role="bold"> [</emphasis> <emphasis> sourceCsvEscape </emphasis>
-  <emphasis role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis>
-  <emphasis> failIfNoSourceFile </emphasis> <emphasis
+  <emphasis>espServerIpPort</emphasis> <emphasis role="bold">]</emphasis>
+  ,<emphasis> </emphasis> <emphasis role="bold">[</emphasis>
+  <emphasis>maxConnections</emphasis> <emphasis role="bold">]</emphasis>
+  ,<emphasis role="bold"> [</emphasis> <emphasis>allowOverwrite</emphasis>
+  <emphasis role="bold">] , [</emphasis> <emphasis>replicate</emphasis>
+  <emphasis role="bold">] , [</emphasis> <emphasis>compress
+  </emphasis><emphasis role="bold">]</emphasis> , <emphasis role="bold">
+  [</emphasis> <emphasis> sourceCsvEscape </emphasis> <emphasis
   role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis> <emphasis>
-  recordStructurePresent </emphasis> <emphasis role="bold">]</emphasis>,
-  <emphasis role="bold"> [</emphasis> <emphasis> quotedTerminator </emphasis>
+  failIfNoSourceFile </emphasis> <emphasis role="bold">]</emphasis>, <emphasis
+  role="bold"> [</emphasis> <emphasis> recordStructurePresent </emphasis>
   <emphasis role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis>
-  <emphasis> encoding </emphasis> <emphasis role="bold">]</emphasis><emphasis
-  role="bold">[</emphasis> <emphasis>expireDays</emphasis> <emphasis
+  <emphasis> quotedTerminator </emphasis> <emphasis role="bold">]</emphasis>,
+  <emphasis role="bold"> [</emphasis> <emphasis> encoding </emphasis>
+  <emphasis role="bold">]</emphasis><emphasis role="bold"> , [</emphasis>
+  <emphasis>expireDays</emphasis> <emphasis role="bold">] ,
+  </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <para><emphasis>dfuwuid</emphasis> <emphasis role="bold"> :=
@@ -52,32 +55,34 @@
     </indexterm><indexterm>
       <primary>fSprayDelimited</primary>
     </indexterm>(</emphasis> <emphasis> sourceIP </emphasis> <emphasis
-  role="bold">, </emphasis> <emphasis>sourcepath , </emphasis> <emphasis
-  role="bold"> [</emphasis> <emphasis> maxrecordsize </emphasis> <emphasis
+  role="bold">, </emphasis> <emphasis>sourcePath , </emphasis> <emphasis
+  role="bold"> [</emphasis> <emphasis> sourceMaxRecordSize </emphasis>
+  <emphasis role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> sourceCsvSeparate </emphasis> <emphasis
   role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
-  role="bold">[</emphasis> <emphasis> srcCSVseparator </emphasis> <emphasis
-  role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis
-  role="bold">[</emphasis> <emphasis> srcCSVterminator </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> sourceCsvTerminate </emphasis> <emphasis
   role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis role="bold">
-  [</emphasis> <emphasis> srcCSVquote </emphasis> <emphasis role="bold">]
-  </emphasis> <emphasis>, destinationgroup, destinationlogicalname </emphasis>
+  [</emphasis> <emphasis> sourceCsvQuote </emphasis> <emphasis role="bold">]
+  </emphasis> <emphasis>, destinationGroup, destinationLogicalName </emphasis>
   <emphasis role="bold">, [</emphasis> <emphasis>timeout</emphasis> <emphasis
-  role="bold">] , [</emphasis> <emphasis>espserverIPport</emphasis> <emphasis
+  role="bold">] , [</emphasis> <emphasis>espServerIpPort</emphasis> <emphasis
   role="bold">]</emphasis> ,<emphasis> </emphasis> <emphasis
   role="bold">[</emphasis> <emphasis>maxConnections</emphasis> <emphasis
   role="bold">]</emphasis> ,<emphasis role="bold"> [</emphasis>
-  <emphasis>allowoverwrite</emphasis> <emphasis role="bold">] , [</emphasis>
+  <emphasis>allowOverwrite</emphasis> <emphasis role="bold">] , [</emphasis>
   <emphasis>replicate</emphasis> <emphasis role="bold">] , [</emphasis>
-  <emphasis> compress </emphasis> <emphasis role="bold">]</emphasis> ,
+  <emphasis>compress </emphasis> <emphasis role="bold">]</emphasis> ,
   <emphasis role="bold"> [</emphasis> <emphasis> sourceCsvEscape </emphasis>
   <emphasis role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis>
   <emphasis> failIfNoSourceFile </emphasis> <emphasis
   role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis> <emphasis>
   recordStructurePresent </emphasis> <emphasis role="bold">]</emphasis>,
   <emphasis role="bold"> [</emphasis> <emphasis> quotedTerminator </emphasis>
-  <emphasis role="bold">]</emphasis>, <emphasis role="bold"> [</emphasis>
-  <emphasis> encoding </emphasis> <emphasis role="bold">]</emphasis> <emphasis
-  role="bold">[</emphasis> <emphasis>expireDays</emphasis> <emphasis
+  <emphasis role="bold">]</emphasis> , <emphasis role="bold"> [</emphasis>
+  <emphasis> encoding </emphasis> <emphasis role="bold">]</emphasis> ,
+  <emphasis role="bold">[</emphasis> <emphasis>expireDays</emphasis> <emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <informaltable colsep="1" frame="all" rowsep="1">
@@ -245,6 +250,13 @@
         </row>
 
         <row>
+          <entry><emphasis>dfuServerQueue</emphasis></entry>
+
+          <entry>Nome do Servidor DFU de destino. O padrão é '' (empty) para o
+          primeiro na fila de DFU no ambiente.</entry>
+        </row>
+
+        <row>
           <entry><emphasis>dfuwuid</emphasis></entry>
 
           <entry>O nome da definição que receberá a string terminada por nulo

+ 11 - 0
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml

@@ -31,6 +31,8 @@
   role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
   role="bold">]</emphasis>, <emphasis
   role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <para><emphasis>dfuwuid</emphasis> <emphasis role="bold"> :=
@@ -60,6 +62,8 @@
   role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
   role="bold">]</emphasis>, <emphasis
   role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis
   role="bold">])</emphasis></para>
 
   <informaltable colsep="1" frame="all" rowsep="1">
@@ -185,6 +189,13 @@
         </row>
 
         <row>
+          <entry><emphasis>dfuServerQueue</emphasis></entry>
+
+          <entry>Nome do Servidor DFU de destino. O padrão é '' (empty) para o
+          primeiro na fila de DFU no ambiente.</entry>
+        </row>
+
+        <row>
           <entry><emphasis>dfuwuid</emphasis></entry>
 
           <entry>O nome do atributo que receberá a string terminada por nulo

+ 79 - 10
docs/PT_BR/ECLWatch/ECLWa_mods/ECLWatchSrc.xml

@@ -673,11 +673,14 @@
 
           <para>É possível ver as representações visuais das workunits
           selecionadas. Visualizations (Visualizações) estão disponíveis na
-          aba <emphasis role="bold">Output</emphasis> da workunit. A aba
-          Visualize oferece diversos tipos de gráficos que podem ser gerados
-          se você incluiu recursos adicionais em seu código ECL através do
-          mecanismo de manifesto aprimorado (como uma página da Web de
-          índice). <figure>
+          página de detalhes da workunit. Nesta página selecione a aba
+          <emphasis role="bold">Output</emphasis>. Verifique se a caixa de
+          seleção do resultado está marcada e pressione o botão <emphasis
+          role="bold">Visualize</emphasis>. <graphic
+          fileref="../../images/ECLWAViz01.jpg"/></para>
+
+          <para>A aba Visualize ofereceuma série de tipos de gráficos que
+          podem ser gerados a partir do seu resultado.<figure>
               <title>Visualização</title>
 
               <mediaobject>
@@ -687,11 +690,8 @@
               </mediaobject>
             </figure></para>
 
-          <para>Para acessar as Visualizations (Visualizações), clique na aba
-          Outputs da página de detalhe das workunits e selecione a aba
-          <emphasis role="bold">Visualize</emphasis> . É possível acessar
-          diferentes tipos de visualização clicando na lista suspensa na aba
-          Visualize. Clique no menu suspenso <emphasis
+          <para>Você pode acessar diversos tipos de visualizações clicando na
+          lista suspensa da aba Visualize. Clique no menu <emphasis
           role="bold">Mappings</emphasis> para alterar os parâmetros.</para>
         </sect3>
 
@@ -1405,6 +1405,59 @@
           <para>Preencha os campos do arquivo de origem e o destino, marque as
           opções necessárias e depois pressione o botão <emphasis
           role="bold">Submit</emphasis> .</para>
+
+          <para><itemizedlist>
+              <listitem>
+                <para>Verifique se a caixa<emphasis role="bold">
+                Overwrite</emphasis> está marcada para sobrescrever arquivos
+                de mesmo nome.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique se a caixa<emphasis role="bold">
+                Compress</emphasis> está marcada para comprimir a cópia do
+                arquivo.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a caixa<emphasis role="bold"> Retain Superfile
+                Structure</emphasis> para a cópia reter a estrutura
+                                de um Superfile. Se você está copiando um
+                superfile que contém                 ÍNDICES, você deve
+                habilitar esta opção.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a caixa<emphasis role="bold">
+                Replicate</emphasis> para criar cópias de backup de todas as
+                parte.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a caixa<emphasis role="bold"> No
+                Split</emphasis> para evitar a divisão da cópia do arquivoem
+                partes.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a caixa<emphasis role="bold"> Wrap</emphasis>
+                para manter o número de partes e envelopamento caso o destino
+                cluster de destino for menor que o original.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a opção<emphasis role="bold"> Preserve
+                Compression</emphasis> para manter a compressão do
+                arquivo.</para>
+              </listitem>
+
+              <listitem>
+                <para>Verifique a opção <emphasis role="bold"> Expire in
+                (days)</emphasis> para inserir o número de dia antes da
+                remoção automática do arquivo. Se omitido, o padrão é -1
+                (nunca expira).</para>
+              </listitem>
+            </itemizedlist></para>
         </sect3>
 
         <sect3 id="CopyLogicalFile">
@@ -1544,6 +1597,22 @@
       <sect2 id="LogicalFilesDetailsPage" role="brk">
         <title>Detalhes do Arquivos Lógicos (Logical Files Details)</title>
 
+        <para>A página de Detalhes de Arquivos Lógicos mostra detalhes
+        específicos para o arquivo selecionado, incluindo: Workunit ID, Owner,
+        Super Owner, Cluster Name, Description, Job Name, Protected state,
+        Content Type, Key Type, File Size, Format, Compressed state e
+        informações como, Modified Date, Expire in value, Directory e Path
+        Mask, Record Size, Record Count, Replication state, File Parts, e Skew
+        information.</para>
+
+        <para>Marque a caixa Protected para proteger o arquivo contra exclusão
+        ou          expiração.</para>
+
+        <para>O valor do Tipo de Chave é exibido apenas se o arquivo for um
+        ÍNDICE. Chave          O tipo pode ter três valores possíveis:
+        Distributed (Distribuído), Local ou          Particionado
+        (Partitioned).</para>
+
         <para>A página Logical Files Detail (Detalhes dos Arquivos lógicos)
         mostra detalhes específicos para o arquivo selecionado. Selecione o
         arquivo para visualização clicando na aba adequada nas abas de

+ 11 - 0
docs/PT_BR/ECLWatch/TheECLWatchMan.xml

@@ -140,6 +140,17 @@
             seu estado atual.</para>
           </listitem>
         </itemizedlist>
+
+        <sect3>
+          <title>Maximizar Painel</title>
+
+          <para><graphic fileref="images/ECLWAMax01.jpg"/></para>
+
+          <para>O ícone<emphasis role="bold">Maximizar/Restaurar</emphasis>
+          está presente em todo o ECL Watch. Pressione o botão para maximizar
+          a o painel correspondente. Pressione novamente para restaurar o
+          painel ao seu tamanho original.</para>
+        </sect3>
       </sect2>
 
       <sect2 id="ListWidgets">

+ 17 - 0
docs/PT_BR/HPCCSpark/CMakeLists.txt

@@ -0,0 +1,17 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2019 HPCC Systems®.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+################################################################################
+get_filename_component(DOC_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../BuildTools/cmake_config/${DOC_DIR_NAME}.txt)

+ 951 - 0
docs/PT_BR/HPCCSpark/SparkHPCC.xml

@@ -0,0 +1,951 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<book xml:base="../">
+  <bookinfo>
+    <title>HPCC / Integração com Spark</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg"/>
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Equipe de documentação de Boca Raton</surname>
+    </author>
+
+    <legalnotice>
+      <para>Sua opinião e comentários sobre este documento são muito
+      bem-vindos e podem ser enviados por e-mail para
+      <email>docfeedback@hpccsystems.com</email></para>
+
+      <para>Inclua a frase <emphasis role="bold">Feedback sobre
+      documentação</emphasis> na linha de assunto e indique o nome do
+      documento, o número das páginas e número da versão atual no corpo da
+      mensagem.</para>
+
+      <para>LexisNexis e o logotipo Knowledge Burst são marcas comerciais
+      registradas da Reed Elsevier Properties Inc., usadas sob licença.</para>
+
+      <para>HPCC Systems<superscript>®</superscript> é uma marca registrada da
+      LexisNexis Risk Data Management Inc.</para>
+
+      <para>Os demais produtos, logotipos e serviços podem ser marcas
+      comerciais ou registradas de suas respectivas empresas.</para>
+
+      <para>Todos os nomes e dados de exemplo usados neste manual são
+      fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é
+      mera coincidência.</para>
+
+      <para/>
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+    <corpname>HPCC Systems<superscript>®</superscript></corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg"/>
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <chapter>
+    <title>HPCC / Instalação e Configuração com Spark</title>
+
+    <para>O plug-in Spark do HPCC Systems, hpccsystems-plugin-spark integra o
+    Spark a sua plataforma HPCC Systems. Uma vez instalado e configurado, o
+    componente Sparkthor gerencia o cluster Spark Integrado. Ele configura,
+    inicia e interrompe dinamicamente o cluster do Spark Integrado ao iniciar
+    ou interromper a plataforma do HPCC Systems.</para>
+
+    <sect1 role="nobrk">
+      <title>Instalação do Spark</title>
+
+      <para>Para adicionar a integração do Spark ao seu cluster HPCC System,
+      você deve ter um cluster HPCC executando a versão 7.0.0 ou posterior. O
+      Java 8 também é necessário. Você precisará configurar o componente
+      Sparkthor. O componente Sparkthor precisa estar associado a um cluster
+      Thor existente válido. Os nós escravos Spark serão criados ao lado de
+      cada escravo Thor. O nó do Integrated Spark Master será designado
+      durante a configuração, junto com quaisquer outros recursos do nó do
+      Spark. Em seguida, o componente Sparkthor gerará um cluster Spark
+      Integrado na inicialização. Você também terá um conector jar SPARK-HPCC
+      disponível.</para>
+
+      <para>Para obter o componente Spark Integrado, os pacotes e plug-ins
+      estão disponíveis no portal do HPCC Systems<superscript>®</superscript>:
+      <ulink
+      url="https://hpccsystems.com/download/free-community-edition">https://hpccsystems.com/download/</ulink></para>
+
+      <para>Faça o download do pacote hpccsystems-plugin-spark no Portal do
+      HPCC Systems.</para>
+
+      <sect2 id="installing-SparkPlugin">
+        <title>Instalando o Plug-in Spark</title>
+
+        <para>O processo de instalação e o pacote a ser feito o download
+        variam de acordo com o sistema operacional que você planeja usar. Os
+        pacotes de instalação não serão instalados com sucesso se suas
+        dependências não estiverem presentes no sistema de destino. Para
+        instalar o pacote, siga as instruções de instalação apropriadas para o
+        seu sistema operacional:</para>
+
+        <sect3 id="Spark_CentOS">
+          <title>CentOS/Red Hat</title>
+
+          <para>Para sistemas baseados em RPM, você pode instalar utilizando o
+          yum.</para>
+
+          <para><programlisting>sudo yum install &lt;hpccsystems-plugin-spark&gt;  </programlisting></para>
+        </sect3>
+
+        <sect3>
+          <title>Ubuntu/Debian</title>
+
+          <para>Para instalar um pacote Ubuntu/Debian, use:</para>
+
+          <programlisting>sudo dpkg -i &lt;hpccsystems-plugin-spark&gt;  </programlisting>
+
+          <para>Após instalar o pacote, execute o seguinte para atualizar
+          quaisquer dependências.</para>
+
+          <para><programlisting>sudo apt-get install -f </programlisting></para>
+
+          <itemizedlist>
+            <listitem>
+              <para>Você precisa copiar e instalar o plug-in em todos os nós.
+              Isso pode ser feito usando o script install-cluster.sh fornecido
+              com o HPCC. Use o comando a seguir:</para>
+
+              <programlisting>sudo /opt/HPCCSystems/sbin/install-cluster.sh &lt;hpccsystems-plugin-spark&gt;</programlisting>
+
+              <para>Mais detalhes, incluindo outras opções que podem ser
+              usadas com este comando, estão incluídos no apêndice Instalando
+              e executando a plataforma HPCC, também disponível no portal da
+              web HPCC Systems<superscript>®</superscript> .</para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+      </sect2>
+    </sect1>
+
+    <sect1 id="Spark_Configuration">
+      <title>Configuração do Spark</title>
+
+      <para>Para configurar seu HPCC System para integrar o Spark, instale o
+      pacote hpccsystems-plugin-spark e modifique o ambiente existente
+      (arquivo) para adicionar o componente Sparkthor.</para>
+
+      <orderedlist>
+        <listitem>
+          <para>Caso esteja em execução, pare o HPCC System usando este
+          comando em uma janela de terminal:</para>
+
+          <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStop.xml"
+                      xpointer="element(/1)"
+                      xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+          <para>
+            <informaltable colsep="1" frame="all" rowsep="1">
+              <?dbfo keep-together="always"?>
+
+              <tgroup cols="2">
+                <colspec colwidth="49.50pt"/>
+
+                <colspec/>
+
+                <tbody>
+                  <row>
+                    <entry>
+                      <inlinegraphic fileref="images/OSSgr3.png"/>
+                    </entry>
+
+                    <entry>Este comando pode ser usado para confirmar que os
+                    processos do HPCC foram interrompidos:<para>
+                        <programlisting>sudo systemctl status hpccsystems-platform.target</programlisting>
+                      </para></entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Inicie o serviço do Gerenciador de
+          Configurações.<programlisting>sudo /opt/HPCCSystems/sbin/configmgr
+</programlisting></para>
+
+          <para>
+            <graphic fileref="images/gs_img_configmgrStart.jpg"/>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Deixe esta janela aberta. Se desejar, você pode
+          minimizá-la.</para>
+        </listitem>
+
+        <listitem>
+          <para>Usando um navegador de Internet, acesse a interface do
+          Gerenciador de Configurações:</para>
+
+          <programlisting>http://&lt;<emphasis>node ip </emphasis>&gt;:8015</programlisting>
+        </listitem>
+
+        <listitem>
+          <para>Marque a caixa Advanced View e selecione o arquivo de ambiente
+          a ser editado.</para>
+        </listitem>
+
+        <listitem>
+          <para>Ative o acesso de gravação (caixa de seleção na parte superior
+          direita da página)</para>
+        </listitem>
+
+        <listitem>
+          <para>Clique com o botão direito no painel Navigator no lado
+          esquerdo.</para>
+
+          <para>Escolher <emphasis role="bold">Novos componentes,</emphasis>
+          em seguida, escolha<emphasis role="bold">
+          Sparkthor</emphasis></para>
+        </listitem>
+
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Configure os atributos da sua instância do Spark:</para>
+
+          <para>
+            <informaltable colsep="1" id="Th.t1" rowsep="1">
+              <tgroup align="left" cols="4">
+                <colspec colwidth="155pt"/>
+
+                <colspec colwidth="2*"/>
+
+                <colspec colwidth="1*"/>
+
+                <colspec colwidth="0.5*"/>
+
+                <thead>
+                  <row>
+                    <entry>atributo</entry>
+
+                    <entry>descrição</entry>
+
+                    <entry>default</entry>
+
+                    <entry>obrigatório</entry>
+                  </row>
+                </thead>
+
+                <tbody>
+                  <row>
+                    <entry>name</entry>
+
+                    <entry>Nome para este processo</entry>
+
+                    <entry>mysparkthor</entry>
+
+                    <entry>obrigatório</entry>
+                  </row>
+
+                  <row>
+                    <entry>ThorClusterName</entry>
+
+                    <entry>Cluster Thor para se conectar a*</entry>
+
+                    <entry>mythor*</entry>
+
+                    <entry>obrigatório</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_EXECUTOR_CORES</entry>
+
+                    <entry>Número de núcleos para executores</entry>
+
+                    <entry>1</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_EXECUTOR_MEMORY</entry>
+
+                    <entry>Memória por executor</entry>
+
+                    <entry>1G</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_MASTER_WEBUI_PORT</entry>
+
+                    <entry>Porta base a ser usada para a interface web
+                    principal</entry>
+
+                    <entry>8080</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_MASTER_PORT</entry>
+
+                    <entry>Porta base a ser usada para a master</entry>
+
+                    <entry>7077</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_WORKER_CORES</entry>
+
+                    <entry>Número de núcleos para workers</entry>
+
+                    <entry>1</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_WORKER_MEMORY</entry>
+
+                    <entry>Memória por worker</entry>
+
+                    <entry>1G</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+
+                  <row>
+                    <entry>SPARK_WORKER_PORT</entry>
+
+                    <entry>Porta base a ser usada para os workers</entry>
+
+                    <entry>7071</entry>
+
+                    <entry>opcional</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable>
+          </para>
+
+          <para>*ThorClusterName segmenta um cluster Thor existente. Ao
+          configurar, você deve escolher um cluster Thor válido existente para
+          o cluster Spark Integrado espelhar.</para>
+
+          <para>
+            <informaltable colsep="1" frame="all" rowsep="1">
+              <?dbfo keep-together="always"?>
+
+              <tgroup cols="2">
+                <colspec colwidth="49.50pt"/>
+
+                <colspec/>
+
+                <tbody>
+                  <row>
+                    <entry>
+                      <inlinegraphic fileref="images/caution.png"/>
+                    </entry>
+
+                    <entry>OBSERVAÇÃO: Você deve deixar pelo menos dois
+                    núcleos abertos para o HPCC fornecer o Spark com dados. O
+                    número de núcleos e memória alocados para o Spark
+                    dependerá da carga de trabalho. Não tente alocar muitos
+                    recursos para o Spark, onde você poderia ter problemas com
+                    o HPCC e o Spark conflitando em busca de recursos.</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Especifique um Nó Mestre do Spark; Selecione a aba Instances.
+          Clique com o botão direito do mouse na tabela Instances e escolha
+          <emphasis role="bold">Add Instances </emphasis></para>
+
+          <para>Adicione a instância do seu nó mestre do Spark.</para>
+
+          <para>
+            <informaltable colsep="1" frame="all" rowsep="1">
+              <?dbfo keep-together="always"?>
+
+              <tgroup cols="2">
+                <colspec colwidth="49.50pt"/>
+
+                <colspec/>
+
+                <tbody>
+                  <row>
+                    <entry>
+                      <inlinegraphic fileref="images/caution.png"/>
+                    </entry>
+
+                    <entry>OBSERVAÇÃO: Você só pode ter uma instância Master
+                    do Spark</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Salve o arquivo do ambiente. Saia do configmgr (Ctrl+C). Copie
+          o arquivo de ambiente do diretório de origem para o diretório
+          /etc/HPCCSystems.</para>
+
+          <para>
+            <informaltable colsep="1" frame="all" rowsep="1">
+              <?dbfo keep-together="always"?>
+
+              <tgroup cols="2">
+                <colspec colwidth="49.50pt"/>
+
+                <colspec/>
+
+                <tbody>
+                  <row>
+                    <entry>
+                      <inlinegraphic fileref="images/caution.png"/>
+                    </entry>
+
+                    <entry>Certifique-se de que o sistema não esteja em
+                    execução antes de tentar mover o arquivo
+                    environment.xml.</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable>
+          </para>
+
+          <para><programlisting>sudo cp /etc/HPCCSystems/source/&lt;new environment file.xml&gt; 
+/etc/HPCCSystems/environment.xml</programlisting> e distribua o arquivo do
+          ambiente para todos os nós em seu cluster</para>
+
+          <para>Você pode optar por usar o script hpcc-push.sh fornecido para
+          implantar o novo arquivo de ambiente. Por exemplo:</para>
+
+          <programlisting>sudo /opt/HPCCSystems/sbin/hpcc-push.sh -s &lt;sourcefile&gt; -t &lt;destinationfile&gt; </programlisting>
+        </listitem>
+      </orderedlist>
+
+      <para>Agora você pode iniciar seu cluster do Sistema HPCC e verificar se
+      o Sparkthor está ativo.</para>
+
+      <?hard-pagebreak ?>
+
+      <para>Para iniciar seu sistema HPCC.</para>
+
+      <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStart.xml"
+                  xpointer="element(/1)"
+                  xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+      <para>Usando um navegador, navegue para a sua instância do Integrated
+      Master Spark (a instância que você adicionou acima) em execução na porta
+      8080 do seu Sistema HPCC.</para>
+
+      <para>Por exemplo, http: //nnn.nnn.nnn.nnn: 8080, em que nnn.nnn.nnn.nnn
+      é o endereço IP do nó do Integrated Spark Master.</para>
+
+      <programlisting>https://192.168.56.101:8080</programlisting>
+
+      <sect2 id="Addl_Spark_Config">
+        <title>Opções de configuração Cluster Integrado do Spark.</title>
+
+        <para>Além das opções de configuração disponíveis através do
+        gerenciador de configuração do HPCC Systems, existem opções para casos
+        extremos e configurações mais avançadas. Para customizar seu ambiente
+        de cluster do Spark Integrado para utilizar essas opções adicionais,
+        use o script <emphasis role="bold">spark-env.sh fornecido</emphasis>
+        .</para>
+
+        <programlisting>/etc/HPCCSystems/externals/spark-hadoop/spark-env.sh</programlisting>
+
+        <para>Para obter mais informações sobre as opções do Spark Cluster,
+        consulte as páginas a seguir.</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>
+              <ulink
+              url="https://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts ">https://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts</ulink>
+            </para>
+          </listitem>
+
+          <listitem>
+            <para>
+              <ulink
+              url="https://spark.apache.org/docs/latest/configuration.html#environment-variables ">https://spark.apache.org/docs/latest/configuration.html#environment-variables</ulink>
+            </para>
+          </listitem>
+        </itemizedlist>
+
+        <sect3 id="ExampleUseCases">
+          <title>Exemplo de Casos de Uso</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>O Spark atualmente requer que o Java 8 seja executado. Em
+              um sistema em que a instalação padrão do Java não é o Java 8. A
+              variável de ambiente JAVA_HOME pode ser usada para definir a
+              versão do Spark Java para o Java 8.</para>
+            </listitem>
+
+            <listitem>
+              <para>Geralmente, quando um job é executado em um cluster Spark,
+              ele assume a propriedade de todos os nós de trabalho. Em um
+              ambiente de cluster compartilhado, isso pode não ser o ideal.
+              Usando o atributo SPARK_MASTER_OPTS é possível definir um limite
+              para o número de nós de workers que um job pode utilizar.</para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+      </sect2>
+    </sect1>
+  </chapter>
+
+  <chapter>
+    <title>O conector Spark HPCC Systems</title>
+
+    <sect1 id="overview" role="nobrk">
+      <title>Visão geral</title>
+
+      <para>O conector distribuído Spark-HPCCSystems é uma biblioteca Java que
+      facilita o acesso de um cluster do Spark aos dados armazenados em um
+      cluster do HPCC Systems. A biblioteca de conectores emprega o recurso de
+      leitura de arquivos remotos padrão do HPCC Systems para ler dados de
+      conjuntos de datasets sequenciais ou indexados do HPCC.</para>
+
+      <para>Os dados em um cluster HPCC são particionados horizontalmente, com
+      dados em cada nó do cluster. Depois de configurados, os dados do HPCC
+      estão disponíveis para acesso em paralelo pelo cluster do Spark.</para>
+
+      <para>No repositório do GitHub (<ulink
+      url="https://github.com/hpcc-systems/Spark-HPCC">https://github.com/hpcc-systems/Spark-HPCC</ulink>)
+      você pode encontrar o código-fonte e exemplos. Existem vários artefatos
+      na pasta DataAccess/src/main/java de interesse primário. A classe
+      <emphasis>org.hpccsystems.spark.HpccFile</emphasis> é a fachada de um
+      arquivo em um cluster HPCC. O
+      <emphasis>org.hpccsystems.spark.HpccRDD</emphasis> é um dataset
+      distribuído resiliente derivado dos dados no cluster HPCC e é criado
+      pelo método
+      <emphasis>org.hpccsystems.spark.HpccFile.getRDD</emphasis>(…). A classe
+      <emphasis>HpccFile</emphasis> suporta o carregamento de dados para
+      construir um objeto <emphasis>Dataset &lt;Row&gt;</emphasis> para a
+      interface Spark . Isso primeiro carregará os dados em um RDD &lt;Row&gt;
+      e, em seguida, converterá esse RDD em um DataSet &lt;Row&gt; por meio
+      dos mecanismos internos do Spark.</para>
+
+      <para>Existem vários artefatos adicionais de algum interesse. A classe
+      <emphasis>org.hpccsystems.spark.ColumnPruner</emphasis> é fornecida para
+      permitir a recuperação somente das colunas de interesse do cluster HPCC.
+      O artefato <emphasis>targetCluster</emphasis> permite especificar o
+      cluster HPCC no qual o arquivo de destino existe. A classe
+      <emphasis>org.hpccsystems.spark.thor.FileFilter</emphasis> é fornecida
+      para facilitar a filtragem de registros de interesse do cluster
+      HPCC.</para>
+
+      <para>O repositório git inclui dois exemplos na pasta
+      Examples/src/main/scala folder. Os exemplos
+      (<emphasis>org.hpccsystems.spark_examples.Dataframe_Iris_LR</emphasis> e
+      <emphasis>org.hpccsystems.spark_examples.Iris_LR</emphasis>) são Scala
+      Objects com uma função main(). Ambos os exemplos usam o dataset clássico
+      da Iris. O dataset pode ser obtido de uma variedade de fontes, incluindo
+      o repositório HPCC-Systems/ecl-ml. IrisDs.ecl (pode ser encontrado na
+      pasta ML/Tests/Explanatory: <ulink
+      url="https://github.com/hpcc-systems/ecl-ml/blob/master/ML/Tests/Explanatory/IrisDS.ecl">https://github.com/hpcc-systems/ecl-ml/blob/master/ML/Tests/Explanatory/IrisDS.ecl</ulink>)
+      pode ser executado para gerar o dataset Iris no HPCC. Um passo a passo
+      dos exemplos é fornecido na seção Exemplos.</para>
+
+      <para>O conector distribuído Spark-HPCCSystems também suporta o PySpark.
+      Ele usa as mesmas classes/API que o Java.</para>
+
+      <sect2 role="brk">
+        <title>Considerações Especiais</title>
+
+        <sect3>
+          <title>Estouro de valor não assinado</title>
+
+          <para>Java não suporta um tipo de inteiro não assinado, portanto, a
+          leitura de valores UNSIGNED8 dos dados do HPCC pode causar um
+          estouro de inteiro em Java. Os valores de UNSIGNED8 são
+          frequentemente usados como identificadores exclusivos em datasets,
+          caso em que o overflow seria aceitável, pois o valor do
+          transbordamento ainda será exclusivo.</para>
+
+          <para>O conector Spark-HPCC permite que os valores não assinados
+          sejam excedidos em Java e não relatará uma exceção. O chamador é
+          responsável por interpretar o valor com base no sinalizador recef
+          <emphasis role="bold">isunsigned</emphasis>.</para>
+        </sect3>
+      </sect2>
+
+      <sect2 id="SparkSupportHPCCECLWatch" role="brk">
+        <title>Suporte Spark no ECL Watch</title>
+
+        <para>Como parte dos HPCC Systems, o conector Spark pode ser
+        monitorado a partir da interface ECL Watch. Consulte a seção
+        <emphasis>ECL Watch</emphasis> consulte o manual Como usar o ECL Watch
+        para obter mais detalhes.</para>
+
+        <para>O cluster do <emphasis role="bold">SparkThor</emphasis> é
+        listado na página Servidores do Sistema do ECL Watch. Para acessar a
+        página Systems Servers:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>No ECL Watch, clique no ícone/link de operações</para>
+          </listitem>
+
+          <listitem>
+            <para>Clique na aba System Servers</para>
+          </listitem>
+        </itemizedlist>
+
+        <para><graphic fileref="images/ECLWA-SprkThor.jpg"/></para>
+
+        <para>Isso informa informações para o nó principal do cluster Spark
+        integrado. Aqui você pode verificar se o cluster está ativo e em
+        execução e executar a verificação prévia selecionando o cluster do
+        SparkThor e pressionando o botão Submit na parte inferior da
+        página.</para>
+
+        <para>Clique no ícone do disco ao lado do cluster do SparkThor para
+        acessar seus registros.</para>
+
+        <para>Clique no ícone azul de informações para visualizar informações
+        mais integradas do cluster do Spark.</para>
+      </sect2>
+    </sect1>
+
+    <sect1 id="primary-classes">
+      <title>Classes Primárias</title>
+
+      <para>A classe <emphasis>HpccFile</emphasis> e as classes
+      <emphasis>HpccRDD</emphasis> são discutidas em mais detalhes abaixo.
+      Essas são as classes principais usadas para acessar dados de um cluster
+      HPCC. A classe <emphasis>HpccFile</emphasis> suporta o carregamento de
+      dados para construir um objeto <emphasis>Dataset &lt;Row&gt;</emphasis>
+      para a interface Spark. Isso primeiro carregará os dados em um RDD
+      &lt;Row&gt; e, em seguida, converterá esse RDD em um DataSet &lt;Row&gt;
+      por meio dos mecanismos internos do Spark.</para>
+
+      <para>A classe <emphasis>org.hpccsystems.spark.HpccFile</emphasis>
+      possui vários construtores. Todos os construtores recebem informações
+      sobre o cluster e o nome do dataset de interesse. As classes JAPI
+      WS-Client são usadas para acessar informações detalhadas do arquivo. Uma
+      definição usada para selecionar as colunas a serem retornadas e uma
+      definição para selecionar as linhas a serem retornadas também podem ser
+      fornecidas. Eles são discutidos na seção <emphasis>Classes Adicionais de
+      Interesse</emphasis> abaixo. A classe tem dois métodos de interesse
+      primário: o método <emphasis>getRDD(…)</emphasis> e o método
+      <emphasis>getDataframe(…)</emphasis> , que são ilustrados na seção
+      <emphasis>Exemplo</emphasis>.</para>
+
+      <para>O método <emphasis>getRecordDefinition()</emphasis> da classe
+      <emphasis>HpccFile</emphasis> pode ser usado para recuperar uma
+      definição do arquivo. O método <emphasis>getFileParts()</emphasis> pode
+      ser usado para ver como o arquivo é particionado no cluster HPCC. Esses
+      métodos retornam as mesmas informações que podem ser encontradas na aba
+      DEF da página de detalhes do dataset do ECL Watch e na aba PARTS
+      respectivamente.</para>
+
+      <para>A classe <emphasis>org.hpccsystems.spark.HpccRDD</emphasis>
+      estende a classe de modelo <emphasis>RDD&lt;Record&gt;</emphasis>. A
+      classe emprega a <emphasis>org.hpccsystems.spark.HpccPart</emphasis>
+      para as partições Spark. A classe
+      <emphasis>org.hpccsystems.spark.Record</emphasis> é usada como o
+      contêiner para os campos do cluster HPCC. A classe
+      <emphasis>Record</emphasis>pode criar uma instância
+      <emphasis>Row</emphasis> com um esquema.</para>
+
+      <para>Os objetos de partição <emphasis>HpccRDD</emphasis> HpccPart leem
+      cada um blocos de dados do cluster HPCC independentemente uns dos
+      outros. A leitura inicial busca o primeiro bloco de dados, solicita o
+      segundo bloco de dados e retorna o primeiro registro. Quando o bloco
+      estiver esgotado, o próximo bloco deverá estar disponível no soquete e
+      uma nova solicitação de leitura será emitida.</para>
+
+      <para>O <emphasis>HpccFileWriter</emphasis> é outra classe primária
+      usada para gravar dados em um cluster HPCC. Tem um único construtor com
+      a seguinte assinatura:</para>
+
+      <programlisting>public HpccFileWriter(String connectionString, String user, String pass) 
+throws Exception { </programlisting>
+
+      <para>O primeiro parâmetro <emphasis>connectionString</emphasis> contém
+      as mesmas informações que o <emphasis>HpccFile</emphasis>. Deve estar no
+      seguinte formato: {http|https}://{ECLWATCHHOST}:{ECLWATCHPORT}</para>
+
+      <para>O construtor tentará se conectar ao HPCC. Esta conexão será então
+      usada para quaisquer chamadas subsequentes para o
+      <emphasis>saveToHPCC</emphasis>.</para>
+
+      <programlisting>public long saveToHPCC(SparkContext sc, RDD&lt;Row&gt; scalaRDD, String clusterName, 
+                        String fileName) throws Exception {</programlisting>
+
+      <para>O método <emphasis>saveToHPCC</emphasis> suporta apenas os tipos
+      RDD&lt;row&gt;. Você pode precisar modificar sua representação de dados
+      para usar essa funcionalidade. No entanto, essa representação de dados é
+      usada pelo Spark SQL e pelo HPCC. Isso só é suportado gravando em uma
+      configuração co-localizada. Assim, o Spark e o HPCC devem ser instalados
+      nos mesmos nós. A leitura suporta apenas a leitura de dados de um
+      cluster HPCC remoto.</para>
+
+      <para>O <emphasis>clusterName</emphasis>, conforme usado no caso acima,
+      é o cluster desejado para gravar dados, por exemplo, no cluster Thor
+      "mitor". Atualmente, há suporte apenas para gravação em clusters do
+      Thor. A gravação em um cluster Roxie não é suportada e retornará uma
+      exceção. O nome do arquivo usado no exemplo acima está no formato HPCC ,
+      por exemplo: "~example::text".</para>
+
+      <para>Internamente, o método saveToHPCC gerará múltiplos jobs do Spark.
+      Atualmente, isso gera dois jobs. O primeiro job mapeia o local das
+      partições no cluster do Spark para fornecer essas informações ao HPCC. O
+      segundo job faz a gravação real dos arquivos. Há também algumas chamadas
+      internamente ao ESP para lidar com coisas como iniciar o processo de
+      gravação amando <emphasis>DFUCreateFile</emphasis> e publicar o arquivo
+      depois de ter sido escrito chamando
+      <emphasis>DFUPublishFile</emphasis>.</para>
+    </sect1>
+
+    <sect1 id="additional-classes-of-interest">
+      <title>Classes Adicionais de Interesse</title>
+
+      <para>As principais classes de interesse para esta seção são a remoção
+      de colunas e a filtragem de arquivos. Além disso, há uma classe auxiliar
+      para remapear informações de IP quando necessário, e isso também é
+      discutido abaixo.</para>
+
+      <para>As informações de seleção da coluna são fornecidas como uma string
+      para o objeto <emphasis>org.hpccsystems.spark.ColumnPruner</emphasis> A
+      string é uma lista de nomes de campos separados por vírgulas. Um campo
+      de interesse pode conter um conjunto de dados de linha ou filho e a
+      notação de nome pontilhada é usada para oferecer suporte à seleção de
+      campos filho individuais. O <emphasis>ColumnPruner</emphasis> analisa a
+      cadeia em uma instância da classe <emphasis>TargetColumn</emphasis> raiz
+      que contém as colunas de destino de nível superior. Um
+      <emphasis>TargetColumn</emphasis> pode ser um campo simples ou pode ser
+      um conjunto de dados filho e, portanto, ser um objeto raiz para o layout
+      do registro filho.</para>
+
+      <para>O filtro de linha é implementado na classe
+      <emphasis>org.hpccsystems.spark.thor.FileFilter</emphasis>. Uma
+      instância de <emphasis>FileFilter</emphasis> é restrita a partir de uma
+      matriz de objetos
+      <emphasis>org.hpccsystems.spark.thor.FieldFilter</emphasis>. Cada
+      instância de <emphasis>FieldFilter</emphasis> é composta de um nome de
+      campo (em notação pontuada para nomes compostos) e uma matriz de objetos
+      <emphasis>org.hpccsystems.spark.thor.FieldFilterRange</emphasis> . Cada
+      instância de <emphasis>FieldFilterRange</emphasis> pode ser um intervalo
+      aberto, ou fechado ou um valor único. O registro é selecionado quando
+      pelo menos um <emphasis>FieldFilterRange</emphasis> corresponde para
+      cada uma das instâncias do <emphasis>FieldFilter</emphasis> na
+      matriz.</para>
+
+      <para>Os valores <emphasis>FieldFilterRange</emphasis> podem ser cadeias
+      ou números. Existem métodos fornecidos para construir os seguintes
+      testes de intervalo: igual, não igual, menor que, menor que ou igual a,
+      maior que, e maior que ou igual a. Além disso, um teste de inclusão de
+      conjunto é suportado para cadeias de caracteres. Se o arquivo for um
+      índice, os campos de filtro, que são campos-chave, são utilizados para
+      uma pesquisa de índice. Qualquer campo de filtro não mencionado é
+      tratado como desconhecido.</para>
+
+      <para>A arquitetura de implantação usual para os Clusters HPCC consiste
+      em uma coleção de nós em uma rede. As informações de gerenciamento de
+      arquivos incluem os endereços IP dos nós que contêm as partições do
+      arquivo. As classes do conector Spark-HPCC usam esses endereços IP para
+      estabelecer conexões de soquete para a leitura remota. Um cluster HPCC
+      pode ser implantado como um cluster virtual com endereços IP privados.
+      Isso funciona para os componentes do cluster porque eles estão todos na
+      mesma LAN privada. No entanto, os nós do cluster Spark podem não estar
+      na mesma LAN. Nesse caso, a classe
+      <emphasis>org.hpccsystems.spark.RemapInfo</emphasis> é usada para
+      definir as informações necessárias para alterar o endereçamento. Existem
+      duas opções que podem ser usadas. A primeira opção é que cada nó escravo
+      do Thor pode receber um IP visível para o cluster do Spark. Esses
+      endereços devem ser um intervalo contíguo. A segunda opção é atribuir um
+      IP e um intervalo contíguo de números de porta. O objeto
+      <emphasis>RemapInfo</emphasis> é fornecido como um parâmetro.</para>
+    </sect1>
+
+    <sect1 id="examples">
+      <title>Exemplos</title>
+
+      <para>Vamos percorrer os dois exemplos abaixo, utilizando um ambiente
+      Spark. Além disso, o repositório fornece programas de teste (na pasta
+      DataAccess/src/test) que podem ser executados como exemplos stand-alone.
+       </para>
+
+      <para>Esses programas de teste devem ser executados a partir de um IDE
+      de desenvolvimento, como o Eclipse, por meio do aplicativo Spark-submit,
+      enquanto os exemplos abaixo são dependentes do shell do Spark.</para>
+
+      <para>Os exemplos a seguir assumem um Spark Shell. Você pode usar o
+      comando spark-submit se você pretende compilar e empacotar esses
+      exemplos. Para conectar corretamente seu shell ao cluster Spark
+      Integrado , forneça os seguintes parâmetros ao iniciá-lo:</para>
+
+      <programlisting>bin/spark-shell  \
+ --master=&lt;spark://{remotesparkhost-IP}:{sparkport}&gt; 
+ --conf="spark.driver.host={localhost-ip}" </programlisting>
+
+      <sect2 id="iris_lr">
+        <title>Iris_LR</title>
+
+        <para>Este exemplo pressupõe que você tenha o Spark Shell em execução.
+        O próximo passo é estabelecer o seu HpccFile e seu RDD para esse
+        arquivo. Você precisa do nome do arquivo, do protocolo (http ou
+        https), do nome ou IP do ESP, da porta do ESP (normalmente 8010) e da
+        sua conta de usuário e senha. O valor <emphasis>sc</emphasis> é o
+        objeto <emphasis>SparkContext</emphasis> fornecido pelo shell.</para>
+
+        <programlisting> val espcon = new Connection("http", "myeclwatchhost", "8010");
+ espcon.setUserName("myuser");
+ espcon.setPassword("mypass");
+ val file = new HpccFile("myfile",espcon);
+</programlisting>
+
+        <para>Agora temos um RDD dos dados. Na verdade, nada aconteceu nesse
+        ponto porque o Spark executa uma avaliação lenta e ainda não há nada
+        para acionar uma avaliação.</para>
+
+        <para>O Spark MLLib possui um pacote de regressão logística. A
+        Regressão Logística MLLib espera que os dados sejam fornecidos como
+        registros formatados em Ponto Rotulado. Isso é comum em implementações
+        de treinamento supervisionado no MLLib. Precisamos de rótulos de
+        coluna, então criamos uma matriz de nomes. Em seguida, fazemos um RDD
+        de ponto rotulado a partir do nosso RDD. Isso também é apenas uma
+        definição. Finalmente, definimos a Regressão Logística que queremos
+        executar. Os nomes das colunas são os nomes dos campos na definição de
+        registro ECL do arquivo, incluindo o nome “class”, que é o nome do
+        campo que contém o código de classificação.</para>
+
+        <programlisting> val names = Array("petal_length","petal_width", "sepal_length", 
+                   "sepal_width")
+ var lpRDD = myRDD.makeMLLibLabeledPoint("class", names)
+ val lr = new LogisticRegressionWithLBFGS().setNumClasses(3)</programlisting>
+
+        <para>A próxima etapa é definir o modelo, que é uma ação e fará com
+        que o Spark avalie as definições.</para>
+
+        <programlisting> val iris_model = lr.run(lpRDD)</programlisting>
+
+        <para>Agora nós temos um modelo. Utilizaremos esse modelo para pegar o
+        dataset original e usar o modelo para produzir novos rótulos. A
+        maneira correta de fazer isso é ter amostrado aleatoriamente alguns
+        dados em espera. Vamos usar o conjunto de dados original porque é mais
+        fácil mostrar como usar o conector. Em seguida, pegamos nossos dados
+        originais e usamos uma função de mapa definida em linha para criar um
+        novo registro com nosso valor de previsão e a classificação
+        original.</para>
+
+        <programlisting> val predictionAndLabel = lpRDD.map {
+   case LabeledPoint(label, features) =&gt;
+     val prediction = iris_model.predict(features)
+   (prediction, label)
+ }</programlisting>
+
+        <para>A classe <emphasis>MulticlassMetrics</emphasis> agora pode ser
+        usada para produzir uma matriz de confusão.</para>
+
+        <programlisting> val metrics = new MulticlassMetrics(predictionAndLabel)
+ metrics.confusionMatrix</programlisting>
+      </sect2>
+
+      <sect2 id="dataframe_iris_lr">
+        <title>Dataframe_Iris_LR</title>
+
+        <para>O Dataframe_Iris_LR é semelhante ao Iris_LR, exceto que um
+        Dataframe é usado e as novas classes do ML Spark são usadas em vez das
+        antigas classes MLLib. Como o ML não está completamente pronto,
+        voltamos para uma classe MLLib para criar nossa matriz de
+        confusão.</para>
+
+        <para>Uma vez que o shell Spark é criado, precisamos das classes de
+        importação.</para>
+
+        <para><programlisting> import org.hpccsystems.spark.HpccFile
+ import org.apache.spark.sql.Dataset
+ import org.apache.spark.ml.feature.VectorAssembler
+ import org.apache.spark.ml.classification.LogisticRegression
+ import org.apache.spark.mllib.evaluation.MulticlassMetrics</programlisting></para>
+
+        <para>O próximo passo é estabelecer o objeto
+        <emphasis>HpccFile</emphasis> e criar o Dataframe. O
+        <emphasis>valor</emphasis> do spark é um objeto
+        <emphasis>SparkSession</emphasis> fornecido pelo shell e é usado em
+        vez do objeto<emphasis>SparkContext</emphasis> .</para>
+
+        <programlisting> val espcon = new Connection("http", "myeclwatchhost", "8010");
+ espcon.setUserName("myuser");
+ espcon.setPassword("mypass");
+ val file = new HpccFile("myfile",espcon);
+</programlisting>
+
+        <para>As classes de aprendizado de máquina do Spark
+        <emphasis>ml</emphasis> usam classes de contêiner de dados diferentes.
+        No caso da Regressão Logística, precisamos transformar nossas linhas
+        de dados em uma linha com uma coluna chamada "recursos" contendo os
+        recursos e uma coluna chamada "rótulo" contendo o rótulo de
+        classificação. Lembre-se de que nossa linha tem “class”,
+        “sepal_width”, “sepal_length”, “petal_width” e “petal_length” como os
+        nomes das colunas. Esse tipo de transformação pode ser realizado com
+        uma classe <emphasis>VectorAssembler</emphasis> .</para>
+
+        <programlisting> val assembler = new VectorAssembler()
+ assembler.setInputCols(Array("petal_length","petal_width",
+                              "sepal_length", "sepal_width"))
+ assembler.setOutputCol("features")
+ val iris_fv = assembler.transform(my_df)
+                              .withColumnRenamed("class", "label")</programlisting>
+
+        <para>Agora que os dados (<emphasis>iris_fv</emphasis>) estão prontos,
+        definimos nosso modelo e ajustamos os dados.</para>
+
+        <programlisting> val lr = new LogisticRegression()
+ val iris_model = lr.fit(iris_fv)</programlisting>
+
+        <para>Agora queremos aplicar nossa previsão e avaliar os resultados.
+        Como observado anteriormente, usaríamos um dataset de validação para
+        realizar a avaliação. Nós vamos ser preguiçosos e apenas usar os dados
+        originais para evitar a tarefa de amostragem. Usamos a função
+        <emphasis>transform(…)</emphasis> para o modelo para adicionar a
+        previsão. A função adiciona uma coluna chamada "previsão" e define um
+        novo conjunto de dados. A nova implementação de Aprendizado de Máquina
+        não possui capacidade de métricas para produzir uma matriz de
+        confusão, portanto, vamos pegar nosso dataset com a coluna de
+        <emphasis> previsão</emphasis> e criar um novo RDD com um conjunto de
+        dados para uma classe <emphasis>MulticlassMetrics</emphasis>.</para>
+
+        <programlisting> val with_preds = iris_model.transform(iris_fv)
+ val predictionAndLabel = with_preds.rdd.map(
+ r =&gt; (r.getDouble(r.fieldIndex("prediction")),
+ r.getDouble(r.fieldIndex("label"))))
+ val metrics = new MulticlassMetrics(predictionAndLabel)
+ metrics.confusionMatrix</programlisting>
+      </sect2>
+    </sect1>
+  </chapter>
+</book>

+ 59 - 4
docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml

@@ -1171,26 +1171,81 @@
 
       <para><programlisting>## HPCC Systems default environment configuration file 
 
-[DEFAULT SETTINGS]
+[DEFAULT]
 configs=/etc/HPCCSystems
 path=/opt/HPCCSystems
 classpath=/opt/HPCCSystems/classes
 runtime=/var/lib/HPCCSystems
 lock=/var/lock/HPCCSystems
-# Supported logging fields: AUD,CLS,DET,MID,TIM,DAT,PID,TID,NOD,JOB,USE,SES,
-#                           COD,MLT,MCT,NNT,COM,QUO,PFX,ALL,STD
+# Supported logging fields: 
+#   AUD,CLS,DET,MID,TIM,DAT,PID,TID,NOD,JOB,USE,SES,COD,MLT,MCT,NNT,COM,QUO,PFX,ALL,STD
 logfields=TIM+DAT+MLT+MID+PID+TID+COD+QUO+PFX
 pid=/var/run/HPCCSystems
 log=/var/log/HPCCSystems
 user=hpcc
 group=hpcc
-home=/Users
+#umask=022
+#nice=0
+home=/home
 environment=environment.xml
 sourcedir=/etc/HPCCSystems/source
 blockname=HPCCSystems
 interface=*
 # enable epoll method for notification events (true/false)
 use_epoll=true
+# allow kernel pagecache flushing where enabled (true/false)
+allow_pgcache_flush=true
+# report UDP network stats
+udp_stats=true
+mpStart=7101
+mpEnd=7500
+mpSoMaxConn=128
+mpTraceLevel=0
+# enable SSL for dafilesrv remote file access 
+#     (SSLNone/false | SSLOnly/true | SSLFirst | UnsecureFirst)
+# Enabling requires setting the HPCCPassPhrase, HPCCCertFile, and HPCCPrivateKeyFile values
+#dfsUseSSL=SSLNone
+
+#Specify location of HPCC PKI public/private key files
+# note: if HPCCPassPhrase specified it must be encrypted
+#HPCCPassPhrase=
+#HPCCCertificateFile=/home/hpcc/.ssh/cert.cer
+#HPCCPublicKeyFile=/home/hpcc/.ssh/id_rsa.pub
+#HPCCPrivateKeyFile=/home/hpcc/.ssh/id_rsa
+
+jvmoptions=-XX:-UsePerfData
+#Options to enable remote debugging of Java service or application
+#jvmoptions=-XX:-UsePerfData -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=2000
+#JNI_PATH=/absolute/path/to/alternative/libjvm.so
+
+# Although HPCC platform includes plugins for both Python2 and Python3, 
+# only one may be safely enabled at a time
+# as the Python libraries export the same symbols for both versions. 
+# Enabling both may lead to unpredicatable results
+# including segfaults or undefined symbol errors.
+#
+# If you would prefer to use python 3 and disable python2, change the line below to read
+#  additionalPlugins=python3
+#
+# Multiple paths can be specified (separate with :, or ; on Windows).
+# Relative paths are assumed to be relative to /opt/HPCCSystems/versioned
+additionalPlugins=python2
+
+# To en-/disable Drop Zone restriction.
+# Default is enabled (true).
+useDropZoneRestriction=true
+# If set, will force matching local file paths to become remote reads, e.g:
+#forceRemotePattern=/var/lib/HPCCSystems/hpcc-data/eclagent/*
+
+# Dafilesrv: default client side connection settings (NB: 0 = disable/use system defaults)
+#dafsConnectTimeoutSeconds=100
+#dafsConnectRetries=2
+#dafsMaxReceiveTimeSeconds=0
+
+# Dafilesrv: set to change number of seconds before retrying an unresponsive dafilesrv connection (default 10 seconds)
+# NB: for now this only applies to the last cached server 
+#dafsConnectFailRetrySeconds=10
+
 </programlisting></para>
 
       <sect2 id="SysAdm_Paths">

Різницю між файлами не показано, бо вона завелика
+ 2111 - 0
docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml~


+ 63 - 0
docs/PT_BR/HPCCSystemAdmin/SA-Mods/DAFtslave.xml

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect2 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect2 id="SA_SupportUtilities">
+  <title>Utilitários de Suporte</title>
+
+  <para>Existem alguns componentes adicionais que não são servidores do
+  sistema nem interfaces do cliente, mas são importantes no suporte a tarefas
+  do HPCC.</para>
+
+  <sect3 id="DAFilesrv">
+    <title>dafilesrv</title>
+
+    <para>O dafilesrv é um daemon que é executado em servidores do sistema ou
+    locais físicos no HPCC system. Esse daemon permite que os componentes do
+    HPCC tenham acesso a arquivos em locais de arquivos físicos. O acesso a
+    arquivos pode ser de pulverização, despraying, cópia, acesso a logs, etc.
+    Qualquer coisa que requeira um arquivo de outro nó, deve ter o dafilesrv
+    em execução nesse nó. O daemon dafilesrv pode ser configurado para
+    permitir apenas conexões SSL, o que garante o acesso remoto a arquivos
+    físicos.</para>
+
+    <para>O daemon do dafilesrv é executado como um processo em todos os nós
+    do HPCC. O daemon normalmente continuará funcionando mesmo que seu sistema
+    esteja parado. Esse é um fato importante a ter em mente se você estiver
+    interrompendo o sistema para manutenção, instalações ou atualizações.
+    Mesmo se você emitir o comando de parada do HPCC, ainda precisará parar o
+    daemon dafilesrv.</para>
+
+    <para>Uma maneira de verificar e ver se o dafilesrv está em execução é
+    emitir um comando como o seguinte:</para>
+
+    <para><programlisting>ps -eaf | grep dafilesrv</programlisting> Mesmo se o
+    seu sistema HPCC estiver parado, você ainda deve ver que o dafilesrv está
+    sendo executado.</para>
+
+    <para>Emita o seguinte comando para parar o daemon dafilesrv em um sistema
+    baseado em System V.</para>
+
+    <programlisting>sudo /opt/HPCCSystems/sbin/hpcc-run.sh -a dafilesrv stop</programlisting>
+
+    <para>Emita o seguinte comando para parar o daemon dafiilesrv em um
+    sistema baseado no Systemd.</para>
+
+    <programlisting>hpcc-run.sh -c dafilesrv@mydafilesrv.service stop</programlisting>
+
+    <para>Você deve ter acesso ao nível de permissão sudo para iniciar ou
+    interromper qualquer um dos componentes do HPCC, incluindo
+    dafilesrv.</para>
+
+    <para>Depois de verificar se o dafilesrv não está em execução, você poderá
+    prosseguir com a instalação.</para>
+  </sect3>
+
+  <sect3>
+    <title>ftslave</title>
+
+    <para>O ftslave é um processo usado ao pulverizar dados pelo dfuserver. O
+    processo ftslave é lançado sob demanda como parte do processo de spray.
+    Pode haver vários processos ftslave em execução em qualquer nó em
+    determinado momento, dependendo do número de sprays ativos.</para>
+  </sect3>
+</sect2>

+ 351 - 0
docs/PT_BR/HPCCSystemAdmin/SA-Mods/DaliLDAP.xml

@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1 id="Dali-LDAP">
+  <title>Dali e Segurança</title>
+
+  <para>Esta seção contém informações adicionais sobre as configurações de
+  segurança e Dali</para>
+
+  <sect2 id="LDAP-Dali">
+    <title>Configurações de segurança Dali e LDAP</title>
+
+    <para>Existem algumas configurações de segurança Dali que afetam o
+    desempenho do Dali. As seguintes configurações explicam ainda mais o
+    impacto de algumas configurações comuns de segurança.</para>
+
+    <sect3 id="DaliNoLDAP">
+      <title>Dali sem LDAP</title>
+
+      <para>Se você configurar o Dali sem nenhum servidor LDAP
+      conectado:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Qualquer pessoa pode acessar qualquer arquivo e qualquer
+          workunit. Essencialmente, você não tem segurança.</para>
+        </listitem>
+
+        <listitem>
+          <para>Sem um servidor LDAP configurado, o atributo CheckScopeScan na
+          configuração é ignorado. Isso significa que qualquer usuário pode
+          ver toda a lista de arquivos lógicos e acessar qualquer
+          arquivo.</para>
+        </listitem>
+
+        <listitem>
+          <para>Qualquer pessoa pode ver, acessar ou até mesmo executar
+          qualquer unidade de trabalho.</para>
+        </listitem>
+      </itemizedlist>
+    </sect3>
+
+    <sect3>
+      <title>Dali com o servidor LDAP e a configuração CheckScopeScans
+      desativada</title>
+
+      <para>Nesse cenário, você tem seu Dali vinculado a um servidor LDAP e o
+      atributo CheckScopeScans é definido como false</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>A configuração CheckScopeScans afeta somente a listagem de
+          arquivos lógicos.</para>
+        </listitem>
+
+        <listitem>
+          <para>Todas as chamadas de acesso a arquivos são autorizadas,
+          garantindo que o chamador tenha acesso ao escopo do arquivo
+          especificado.</para>
+        </listitem>
+
+        <listitem>
+          <para>As credenciais do FilesDefaultUser são injetadas se nenhuma
+          for fornecida. A <emphasis>filesDefaultUser</emphasis> é uma conta
+          do LDAP usada para acessar arquivos quando nenhuma credencial de
+          usuário tiver sido fornecida. Esta conta é semelhante a uma conta do
+          tipo “convidado”, por isso deve ter acesso bastante limitado caso
+          seja utilizada. Para desativar o acesso sem credenciais, deixe em
+          branco o atributo filesDefaultUser.</para>
+        </listitem>
+
+        <listitem>
+          <para>Como a configuração CheckScopeScans está desativada, os
+          usuários podem ver toda a lista de arquivos lógicos, mesmo que o
+          usuário não tenha acesso para visualizar um arquivo.</para>
+        </listitem>
+      </itemizedlist>
+    </sect3>
+
+    <sect3>
+      <title>Dali com servidor LDAP e configuração CheckScopeScans
+      ativada</title>
+
+      <para>Nesse cenário, você tem seu Dali vinculado a um servidor LDAP e o
+      atributo CheckScopeScans é definido como true.</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Todas as chamadas de acesso a arquivos são autorizadas,
+          garantindo que o chamador tenha acesso ao escopo do arquivo
+          especificado.</para>
+        </listitem>
+
+        <listitem>
+          <para>Os usuários podem ver os arquivos listados para todos os
+          arquivos nos escopos de arquivo para os quais eles têm permissão de
+          acesso de leitura.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Você deve ter em mente, pois o sistema deve fazer uma chamada LDAP
+      externa para verificar todos os níveis no escopo, de cima para baixo,
+      que a profundidade dos escopos de arquivos pode ter um custo de
+      desempenho em sistemas com File Scope Security (Segurança de Escopo de
+      Arquivo) ativada.</para>
+    </sect3>
+  </sect2>
+
+  <sect2 id="WhitelistInDali" role="brk">
+    <title>Whitelist em Dali</title>
+
+    <para>O servidor Dali tem a capacidade de restringir o acesso a apenas
+    aqueles nós que estão associados a uma função na definição de ambiente
+    (environment.xml) ou explicitamente adicionados a
+    <emphasis>Whitelist</emphasis> na configuração de Dali. A Whitelist é
+    implicitamente preenchida com os componentes do servidor e suas funções
+    conforme definido no ambiente. Você pode adicionar explicitamente nós
+    adicionais e suas funções aprovadas a uma Whitelist suplementar no arquivo
+    environment.xml, conforme mostrado no exemplo a seguir:</para>
+
+    <para><programlisting>&lt;Environment&gt;
+...
+ &lt;Software&gt;
+ ...
+   &lt;DaliServerProcess&gt;
+     &lt;WhiteList&gt;
+      &lt;Entry hosts="adminnode1,192.168.0.101" roles="DaliDiag,DaliAdmin"/&gt;
+      &lt;Entry hosts="adminnode3" roles="DaliDiag"/&gt;
+     &lt;/WhiteList&gt;
+   ...
+   &lt;/DaliServerProcess&gt;
+ ...
+ &lt;/Software&gt;
+...
+&lt;/Environment&gt;
+</programlisting></para>
+
+    <para>Os hosts podem ser especificados por nome de host ou endereço
+    IP.</para>
+
+    <para>As funções devem ser uma das seguintes suportadas:</para>
+
+    <para><simplelist columns="3" type="vert">
+        <member>ThorMaster</member>
+
+        <member>EclCCServer</member>
+
+        <member>EclCC</member>
+
+        <member>EclServer</member>
+
+        <member>EclScheduler</member>
+
+        <member>EclAgent</member>
+
+        <member>AgentExec</member>
+
+        <member>DaliServer</member>
+
+        <member>SashaServer</member>
+
+        <member>DfuServer</member>
+
+        <member>EspServer</member>
+
+        <member>Config</member>
+
+        <member>SchedulerAdmin</member>
+
+        <member>RoxieMaster</member>
+
+        <member>BackupGen</member>
+
+        <member>DaFsControl</member>
+
+        <member>SwapNode</member>
+
+        <member>DaliAdmin</member>
+
+        <member>UpdateEnv</member>
+
+        <member>TreeView</member>
+
+        <member>DaliDiag</member>
+
+        <member>Testing</member>
+
+        <member>XRef</member>
+
+        <member>Monitoring</member>
+      </simplelist></para>
+
+    <para><simplelist columns="3" type="vert">
+        <member/>
+      </simplelist></para>
+
+    <para/>
+
+    <para>Uma entrada pode ter um ou mais nós especificados em uma lista
+    separada por vírgulas.</para>
+
+    <para>Os nós podem ter uma ou mais funções, especificadas em uma lista
+    separada por vírgulas.</para>
+
+    <para>Nunca deve ser necessário incluir explicitamente as seguintes
+    funções:</para>
+
+    <para><programlisting>AgentExec, DaliServer, EclAgent, EclCC, EclCCServer, EclServer, EspServer, 
+SashaServer, RoxieMaster, and ThorMaster </programlisting></para>
+
+    <para>Essas funções correspondem a componentes no ambiente, que devem
+    estar sempre implicitamente na Whitelist (lista de permissões) pela
+    inclusão no ambiente.</para>
+
+    <para>Além disso, o servidor Dali coloca na Whitlist (lista de permissões)
+    automaticamente essas funções:</para>
+
+    <para><programlisting>Config, DaFsControl, DaliAdmin, DaliDiag, ScheduleAdmin, SwapNode, Testing, 
+TreeView, UpdateEnv, XRef, Monitoring</programlisting></para>
+
+    <?hard-pagebreak ?>
+
+    <para>As únicas funções que provavelmente serão adicionadas são
+    ferramentas administrativas e utilitários que não são componentes
+    definidos, por exemplo:</para>
+
+    <para><programlisting>Config, DaFsControl, DaliAdmin, DaliDiag, SchedulerAdmin, SwapNode, Testing, 
+TreeView, UpdateEnv, XRef</programlisting></para>
+
+    <para>Para desabilitar totalmente o recurso Whitelist (Lista de
+    permissões), você pode adicionar:</para>
+
+    <para><programlisting>&lt;WhiteList enabled="false"&gt;</programlisting><emphasis
+    role="bold">Isso não é recomendado para ambientes de
+    produção.</emphasis></para>
+
+    <para/>
+
+    <sect3>
+      <title>Recuperar a Whitelist (Lista de permissões)</title>
+
+      <para>Para recuperar toda a lista de desbloqueio (implícita e
+      explícita), use a linha de comando <emphasis
+      role="bold">dalidiag</emphasis> (encontrada em
+      /opt/HPCCSystems/bin/.)</para>
+
+      <para><programlisting>dalidiag &lt;dali-ip&gt; -whitelist</programlisting></para>
+    </sect3>
+
+    <sect3 role="brk">
+      <title>Use envmod para adicionar ou remover entradas na lista de
+      permissões suplementar</title>
+
+      <para>Recomendamos usar o comando <emphasis
+      role="bold">envmod</emphasis> para adicionar entradas da Whitelist ao
+      seu arquivo environment.xml. O utilitário envmod pode ser encontrado em
+      /opt/HPCCSystems/bin/.</para>
+
+      <para>Use um arquivo de modelo, como o exemplo a seguir:</para>
+
+      <para><programlisting>{
+    "name" : "AddWhiteList",
+    "description" : "Add whilelist to environment",
+    "type" : "modification",
+    "operations" : [
+        {
+            "action" : "find",
+            "target_path" : "/Environment/Software/DaliServerProcess/Whitelist",
+            "data" : {
+                "create_if_not_found" : true,
+                "save" : {
+                    "name" : "whiteListNodeId"
+                }
+            }
+        },
+        {
+            "action" : "create",
+            "target_nodeid" : "{{whiteListNodeId}}",
+            "data" : {
+                "node_type" : "Entry",
+                "attributes" : [
+                    {
+                        "name" : "hosts",
+                        "value" : "adminnode1,192.168.0.101"
+                    },
+                    {
+                        "name" : "roles",
+                        "value" : "DaliDiag,DailAdmin"
+                    }
+                ]
+            }
+        },
+{
+            "action" : "create",
+            "target_nodeid" : "{{whiteListNodeId}}",
+            "data" : {
+                "node_type" : "Entry",
+                "attributes" : [
+                    {
+                        "name" : "hosts",
+                        "value" : "adminnode3"
+                    },
+                    {
+                        "name" : "roles",
+                        "value" : "DaliDiag"
+                    }
+                ]
+            }
+        }
+    ]
+}</programlisting>Este exemplo adiciona as funções DaliDiag e DaliAdmin aos
+      dois nós. Um nó é especificado usando seu nome de host (adminnode1). O
+      outro é referenciado pelo endereço IP. Adiciona o papel de DaliDiag ao
+      adminnode3. O resultado corresponde ao exemplo XML mostrado
+      anteriormente.</para>
+
+      <para>Exemplo de linha de comando:</para>
+
+      <programlisting>sudo /opt/HPCCSystems/bin/envmod \
+     -t myWhitelistTemplate.json \
+     -e /etc/HPCCSystems/source/environment.xml \
+     -d /opt/HPCCSystems/componentfiles/configschema/xsd \
+     -o /etc/HPCCSystems/source/environmentWithWhitelist.xml</programlisting>
+
+      <para>O parâmetro -t (ou --template) é o local do modelo.</para>
+
+      <para>O parâmetro -e (ou --env) é o local do arquivo de ambiente. Se
+      omitido, a ação valida o modelo.</para>
+
+      <para>O parâmetro -d (ou --schema-dir) é o local dos arquivos de
+      esquema.</para>
+
+      <para>O parâmetro -o (ou --output) é o local do arquivo de saída. Se
+      você especificar -o sem um caminho completo para um arquivo, ele
+      substituirá o arquivo de entrada.</para>
+
+      <para><emphasis role="bold">Depois de ter modificado seu ambiente, você
+      DEVE copiar environment.xml para cada nó. </emphasis></para>
+
+      <para><emphasis role="bold"/></para>
+
+      <para>Para remover uma entrada, use um modelo como o seguinte:</para>
+
+      <para><programlisting>{
+    “action” : “delete”,
+    “target_path” : “/Environment/Software/DaliServerProcess/Whitelist/Entry[@hosts=’adminnode3’]”
+}
+</programlisting></para>
+    </sect3>
+  </sect2>
+</sect1>

+ 163 - 0
docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml

@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE sect2 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect2 id="wutool" role="brk">
+  <title><emphasis role="bold">Utilizando o wutool </emphasis></title>
+
+  <para><emphasis role="bold">wutool <indexterm>
+      <primary>wutool</primary>
+    </indexterm></emphasis><emphasis>action </emphasis><emphasis
+  role="bold">[WUID=nnn </emphasis><emphasis role="bold">] [ DALISERVER=ip |
+  CASSANDRASERVER=ip] [option=value]</emphasis></para>
+
+  <para>A wutool é um utilitário de linha de comando usado para manter seu
+  armazenamento das workunits. Ela pode ser encontrada em
+  /opt/HPCCSystems/bin/ em qualquer servidor onde a plataforma tenha sido
+  instalada. É possível usar esse utilitário para exportar suas Workunits de
+  um servidor Dali e depois importar para um data storage do Cassandra Também
+  é possível usá-la para importar workunits arquivadas em um servidor
+  Sasha.</para>
+
+  <informaltable colsep="1" frame="all" rowsep="1">
+    <tgroup cols="2">
+      <colspec align="left" colwidth="125.55pt"/>
+
+      <colspec/>
+
+      <tbody>
+        <row>
+          <entry><emphasis role="bold">Ações</emphasis></entry>
+
+          <entry><ns:textPlaceholder
+          xmlns:ns="http://www.xmlmind.com/xmleditor/namespace/clipboard"/></entry>
+        </row>
+
+        <row>
+          <entry>list &lt;workunits&gt;</entry>
+
+          <entry>Listar Workunits</entry>
+        </row>
+
+        <row>
+          <entry>dump &lt;workunits&gt;</entry>
+
+          <entry>Descarregar o xml para Workunits especificadas.</entry>
+        </row>
+
+        <row>
+          <entry>delete &lt;workunits&gt;</entry>
+
+          <entry>Remover Workunits.</entry>
+        </row>
+
+        <row>
+          <entry>results &lt;workunits&gt;</entry>
+
+          <entry>Descarregar resultados para as workunits
+          especificadas.</entry>
+        </row>
+
+        <row>
+          <entry>archive &lt;workunits&gt;</entry>
+
+          <entry>Arquivar Workunits especificadas em arquivos xml. Há suporte
+          para as seguintes opções: <para>[TO=&lt;directory&gt;]
+          </para><para>[DEL=1] </para><para>[DELETERESULTS=1]
+          </para><para>[INCLUDEFILES=1]</para></entry>
+        </row>
+
+        <row>
+          <entry>restore &lt;filenames&gt;</entry>
+
+          <entry>Restaurar a partir de arquivos xml. [INCLUDEFILES=1]</entry>
+        </row>
+
+        <row>
+          <entry>orphans</entry>
+
+          <entry>Remover informações órfãs do armazenamento</entry>
+        </row>
+
+        <row>
+          <entry>cleanup [days=NN]</entry>
+
+          <entry>Remover Workunits com mais de NN dias</entry>
+        </row>
+
+        <row>
+          <entry>validate</entry>
+
+          <entry>Verificar se há erros no conteúdo do repositório de
+          Workunits. [FIX=1] tentará reparar quaisquer problemas
+          encontrados.</entry>
+        </row>
+
+        <row>
+          <entry>clear</entry>
+
+          <entry>Remover todo o repositório da workunit (exige entire=1
+          repository=1)</entry>
+        </row>
+
+        <row>
+          <entry>initialize</entry>
+
+          <entry>Inicializar o novo repositório de workunit</entry>
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+
+  <para>&lt;workunits&gt; pode ser especificado na linha de comando ou usando
+  um filter owner=XXXX. Se omitido, todas as workunits são
+  selecionadas.</para>
+
+  <para><informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec align="left" colwidth="300pt"/>
+
+        <colspec/>
+
+        <tbody>
+          <row>
+            <entry><emphasis role="bold">Opções </emphasis><para>(Essas opções
+            são válidas se o CASSANDRASERVER estiver
+            especificado)</para></entry>
+
+            <entry><ns:textPlaceholder
+            xmlns:ns="http://www.xmlmind.com/xmleditor/namespace/clipboard"/></entry>
+          </row>
+
+          <row>
+            <entry>CASSANDRA_KEYSPACE<para><ns:textPlaceholder
+            xmlns:ns="http://www.xmlmind.com/xmleditor/namespace/clipboard"/></para></entry>
+
+            <entry>Keyspace do Cassandra, o padrão é HPCC.</entry>
+          </row>
+
+          <row>
+            <entry>CASSANDRA_USER</entry>
+
+            <entry>Nome de usuário do Cassandra a ser usado (se
+            necessário).</entry>
+          </row>
+
+          <row>
+            <entry>CASSANDRA_PASSWORD</entry>
+
+            <entry>Senha do Cassandra a ser usada (se necessário).</entry>
+          </row>
+
+          <row>
+            <entry>TRACELEVEL</entry>
+
+            <entry>Trace level (1-10)</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>Exemplos:</para>
+
+  <para><programlisting>/opt/HPCCSystems/bin/wutool archive DALISERVER=. del=1
+
+/opt/HPCCSystems/bin/wutool restore *.xml CASSANDRASERVER=192.168.56.120 CASSANDRA_KEYSPACE=hpcc2 </programlisting></para>
+</sect2>

Різницю між файлами не показано, бо вона завелика
+ 163 - 56
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/Hardware.xml


+ 1 - 0
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStart.xml

@@ -0,0 +1 @@
+<programlisting>sudo systemctl start hpccsystems-platform.target</programlisting>

+ 1 - 0
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/SysDStop.xml

@@ -0,0 +1 @@
+<programlisting>sudo systemctl stop hpccsystems-platform.target</programlisting>

Різницю між файлами не показано, бо вона завелика
+ 913 - 464
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml


+ 92 - 0
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/anagram1.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect2 id="ECLExample_Anagram1" role="nobrk">
+  
+
+  <title>Exemplo ECL: Anagram1</title>
+
+  
+
+  <para>Este exemplo pega uma STRING e
+  gera todos os anagramas possíveis a partir dela. Este código serve de base para um segundo
+  exemplo que analisa quais destas são palavras reais usando um arquivo de dados da
+  lista de palavras.</para>
+
+  <para><orderedlist>
+      <listitem>
+        <para>Abra o ECL IDE
+        (Start <emphasis role="bold">&gt;&gt;</emphasis> All Programs
+        <emphasis role="bold">&gt;&gt;</emphasis> HPCC
+        Systems <emphasis role="bold"> &gt;&gt;</emphasis> ECL
+        IDE ) e faça o login no HPCC.</para>
+      </listitem>
+
+      <listitem>
+        <para>Abrir um Nova <emphasis role="bold">Janela do compilador</emphasis> (CTRL+N)
+        e escreva o seguinte código:<programlisting>STRING Word := 'FRED' :STORED('Word');
+R := RECORD
+        STRING SoFar {MAXLENGTH(200)};
+        STRING Rest {MAXLENGTH(200)};
+     END;
+Init := DATASET([{'',Word}],R);
+R Pluck1(DATASET(R) infile) := FUNCTION
+R TakeOne(R le, UNSIGNED1 c) := TRANSFORM
+                SELF.SoFar := le.SoFar + le.Rest[c];
+                SELF.Rest := le.Rest[..c-1]+le.Rest[c+1..]; 
+// Boundary Conditions handled automatically
+  END;
+RETURN NORMALIZE(infile,LENGTH(LEFT.Rest),TakeOne(LEFT,COUNTER));
+  END;
+L := LOOP(Init,LENGTH(TRIM(Word)),Pluck1(ROWS(LEFT)));
+OUTPUT(L);</programlisting></para>
+      </listitem>
+
+      <listitem>
+        <para>Selecione <emphasis role="bold">thor</emphasis> como seu cluster de
+        destino.</para>
+      </listitem>
+
+      <listitem>
+        <para>Pressione o botão de verificação de sintaxe localizado na barra de ferramentas principal (ou pressione
+        F7)</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Pressione o botão <emphasis role="bold">Submit</emphasis> (ou
+        as teclas ctrl+enter).</para>
+
+        <para><figure>
+            <title>Tarefa concluída</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/vmimg11a.JPG" />
+              </imageobject>
+            </mediaobject>
+          </figure>A marcação na cor verde indica uma conclusão
+        bem-sucedida.</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Clique na aba do número da workunit e, em seguida, na aba Result 1
+        para ver os resultados.</para>
+
+        <para><figure>
+            <title>Resultado do job concluído</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/vmimg11b.JPG" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+      </listitem>
+    </orderedlist></para>
+
+  <?hard-pagebreak ?>
+</sect2>

+ 642 - 0
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/anagram2.xml

@@ -0,0 +1,642 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect2 id="ECLRoxieExample_Anagram2">
+  <title>Exemplo Roxie: Anagram2</title>
+
+  <para>Neste exemplo, vamos baixar um arquivo de dados de código aberto com palavras do
+  dicionário, fazer o spray (distribuir aos nós) desse arquivo para nosso cluster Thor e validar
+  nossos anagramas em relação a esse arquivo para que possamos determinar quais palavras são válidas. A
+  etapa de validação usa um JOIN da lista de anagramas
+  para o arquivo do dicionário. O uso de um índice e de uma junção com chave seria mais
+  eficiente, mas isso serve apenas como um simples exemplo.</para>
+
+  <sect3 id="RoxieExample_DownloadWordList">
+    
+
+    <title>Fazer o download da Lista de Palavras</title>
+
+    
+
+    <para>Vamos fazer um download da lista de palavras em <ulink
+    url="http://wordlist.aspell.net/12dicts">http://wordlist.aspell.net/12dicts</ulink></para>
+
+    <para><orderedlist>
+        <listitem>
+          <para>Faça o download o pacote  <emphasis>Official 12 Dicts. </emphasis>.
+          Os arquivos estão disponíveis no formato tar.gz ou
+          ZIP.</para>
+        </listitem>
+
+        <listitem>
+          <para>Extraia o conteúdo do pacote e salve o  <emphasis
+          role="bold">2of12.txt.</emphasis> (normalmente encontrado na subpasta
+          American) para uma pasta em sua máquina local.</para>
+        </listitem>
+      </orderedlist></para>
+  </sect3>
+
+  <sect3 id="Load_the_Incoming_Data">
+    
+
+    <title>Carregar o arquivo de dicionário para sua Zona de Entrada de Arquivo</title>
+
+    
+
+    <para>Nesta etapa, você copiará os arquivos de dados para um local onde
+    eles possam ser distribuídos aos nós de seu cluster HPCC.
+    Uma zona de entrada de arquivos é um local de armazenagem anexado ao seu HPCC.
+    Ela possui um utilitário em execução para facilitar o spraying (processo de distribuir dados aos nós) para um cluster.</para>
+
+    <para>Para arquivos de dados menores, com tamanho máximo de 2GB,
+    você pode usar o utilitário enviar/baixar arquivo no ECL
+    Watch. Este arquivo de dados possui apenas 400 kb (aproximadamente).</para>
+
+    <para>Em seguida, você distribuirá (ou fará o spray) o dataset para todos os nós no
+    cluster do HPCC .  O poder do HPCC
+    vem da sua capacidade de atribuir vários processadores para trabalhar nas diferentes
+    partes do arquivo de dados em paralelo. Até mesmo na VM
+    Edition, que possui apenas um nó único, os dados precisam ser distribuídos aos nós do
+    cluster.</para>
+
+    <orderedlist>
+      <listitem>
+        <para>Em seu navegador, acesse a URL do <emphasis role="bold">ECL
+        Watch</emphasis> . Por exemplo,
+        http://nnn.nnn.nnn.nnn:8010, onde nnn.nnn.nnn.nnn é o endereço IP do seu ESP
+        Server.</para>
+
+        <para><informaltable colsep="1" frame="all" rowsep="1">
+            <?dbfo keep-together="always"?>
+
+            <tgroup cols="2">
+              <colspec colwidth="49.50pt" />
+
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><inlinegraphic
+                  fileref="../../images/caution.png" /></entry>
+
+                  <entry>Seu endereço IP
+                  poderá ser diferente dos endereços fornecidos nas imagens
+                  de exemplo. Use o endereço IP
+                  fornecido pela <emphasis role="bold">sua</emphasis>
+                  instalação</entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable></para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>No ECL Watch, clique no ícone
+        <emphasis role="bold">Files</emphasis> depois clique no link <emphasis
+        role="bold">Landing Zones</emphasis> no submenu de
+        navegação.</para>
+
+        <para>Pressione o botão <emphasis role="bold">Upload </emphasis>
+        .</para>
+
+        <para><figure>
+            <title>Upload</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/LZimg03-1.jpg"
+                           vendor="eclwatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+      </listitem>
+
+      <listitem>
+        <para>Uma caixa de diálogo será aberta. <emphasis role="bold">Navegue</emphasis> e
+        selecione o arquivo a ser enviado e pressione o botão  <emphasis
+        role="bold">Open</emphasis> .</para>
+
+        <para>O arquivo selecionado deve aparecer no campo <emphasis
+        role="bold">File Name</emphasis> . O arquivo de dados possui o seguinte nome:
+        <emphasis role="bold">2of12.txt.</emphasis>.</para>
+      </listitem>
+
+      <listitem>
+        <para><figure>
+            <title>Iniciar a função Enviar arquivo</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/LZimg04a.jpg"
+                           vendor="eclwatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+
+        <para>Pressione o botão <emphasis role="bold">Start</emphasis> 
+        para concluir o envio do arquivo.</para>
+      </listitem>
+    </orderedlist>
+  </sect3>
+
+  <sect3 id="Spray_the_Data_to_THOR">
+    
+
+    <title>Faça o spray do arquivo de dados para o seu <emphasis>Cluster da
+    Refinaria de Dados (Thor)</emphasis></title>
+
+    
+
+    <para>Para usar o arquivo de dados em seu HPCC
+    System, é preciso fazer o "spray” (distribuir) desse arquivo para todos os nós. O <emphasis>spray</emphasis>
+    ou <emphasis>importação</emphasis> é a transferência de um arquivo de dados de um
+    local (como a zona de entrada de arquivos) para diversas partes do arquivo ou nós em um
+    cluster.</para>
+
+    <para>O arquivo distribuído ou pulverizado(sprayed) passa a ter um
+    <emphasis>logical-file-name</emphasis> da seguinte forma<emphasis role="bold">:
+    ~thor::word_list_csv </emphasis> O sistema mantém uma lista de arquivos
+    lógicos e as localizações do arquivo físico correspondente das partes do
+    arquivo.</para>
+
+    <orderedlist>
+      <listitem>
+        <para>Abra o ECL Watch usando a
+        URL:</para>
+
+        <para><emphasis role="bold">http://nnn.nnn.nnn.nnn:pppp (onde
+        nnn.nnn.nnn.nnn é o endereço IP do seu ESP Server
+        e pppp é a porta. A
+        porta padrão é 8010)</emphasis></para>
+      </listitem>
+
+      <listitem>
+        <para>Clique no link <emphasis role="bold">Files</emphasis> depois clique no
+        link <emphasis role="bold">Landing Zones</emphasis> no submenu de
+        navegação. Selecione a zona de entrada de arquivos apropriada (caso haja mais
+        de uma zona de entrada de arquivos). Clique na seta à esquerda da sua
+        zona de entrada de arquivos para expandir.</para>
+      </listitem>
+
+      <listitem>
+        <para>Selecione o arquivo na zona de entrada de arquivos marcando a caixa ao lado
+        dele.</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Marque a caixa ao lado de 2of12, então pressione o botão <emphasis
+        role="bold">Delimited</emphasis> .</para>
+
+        <para><figure>
+            <title>Spray delimitado</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/GSSprayDict.jpg"
+                           vendor="eclwatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+
+        <para>A página <emphasis role="bold">DFU
+        Spray Delimited</emphasis> é exibida.</para>
+      </listitem>
+
+      <listitem>
+        <para>Selecione "mythor" na lista suspensa do Grupo de destino.</para>
+      </listitem>
+
+      <listitem>
+        <para>Preencha o Target Scope (Escopo de destino) como<emphasis> thor</emphasis>.</para>
+      </listitem>
+
+      <listitem>
+        <para>Preencha os demais parâmetros (caso ainda não tenham sido
+        preenchidos).</para>
+
+        <para><itemizedlist>
+            <listitem>
+              <para>Máximo tamanho do registro 8192</para>
+            </listitem>
+
+            <listitem>
+              <para>Separador \,</para>
+            </listitem>
+
+            <listitem>
+              <para>Terminador de linhas \n,\r\n</para>
+            </listitem>
+
+            <listitem>
+              <para>Aspas: '</para>
+            </listitem>
+          </itemizedlist></para>
+      </listitem>
+
+      <listitem>
+        <para>Preencha o Target Name usando o restante do nome do arquivo lógico
+        desejado: word_list_csv<emphasis role="bold"> </emphasis></para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Certifique-se de que a caixa <emphasis role="bold">Overwrite</emphasis> esteja
+        selecionada.</para>
+
+        <para>Se disponível, certifique-se de que a caixa <emphasis
+        role="bold">Replicate</emphasis> esteja selecionada. (A opção Replicate
+        está disponível apenas em sistemas em que a replicação tenha
+        sido ativada.)</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Pressione o botão <emphasis role="bold">Spray</emphasis><emphasis
+        role="bold"> </emphasis>.</para>
+
+        <para>A guia exibe a workunit DFU
+        onde é possível ver o progresso do spray (distribuição aos nós).</para>
+      </listitem>
+    </orderedlist>
+  </sect3>
+
+  <sect3 id="RunTheQueryOnThor">
+    
+
+    <title>Executa a consulta no Thor</title>
+
+    
+
+    <para><orderedlist>
+        <listitem>
+          <para>Abrir um Nova <emphasis role="bold">Janela do compilador</emphasis>
+          (CTRL+N)
+          e escreva o seguinte código:<programlisting>IMPORT Std;
+layout_word_list := record
+  string word;
+end;
+File_Word_List := dataset('~thor::word_list_csv', layout_word_list,
+                          CSV(heading(1),separator(','),quote('')));
+STRING Word := 'teacher' :STORED('Word');
+STRING SortString(STRING input) := FUNCTION
+  OneChar := RECORD
+    STRING c;
+  END;
+  OneChar MakeSingle(OneChar L, unsigned pos) := TRANSFORM
+    SELF.c := L.c[pos];
+  END;
+  Split := NORMALIZE(DATASET([input],OneChar), LENGTH(input),
+  MakeSingle(LEFT,COUNTER));
+  SortedSplit := SORT(Split, c);
+  OneChar Recombine(OneChar L, OneChar R) := TRANSFORM
+    SELF.c := L.c+R.c;
+  END;
+  Recombined := ROLLUP(SortedSplit, Recombine(LEFT, RIGHT),ALL);
+  RETURN Recombined[1].c;
+END;
+
+STRING CleanedWord := SortString(TRIM(Std.Str.ToUpperCase(Word)));
+
+R := RECORD
+  STRING SoFar {MAXLENGTH(200)};
+  STRING Rest {MAXLENGTH(200)};
+END;
+Init := DATASET([{'',CleanedWord}],R);
+R Pluck1(DATASET(R) infile) := FUNCTION
+  R TakeOne(R le, UNSIGNED1 c) := TRANSFORM
+    SELF.SoFar := le.SoFar + le.Rest[c];
+    SELF.Rest := le.Rest[..c-1]+le.Rest[c+1..];
+    // Boundary Conditions
+    // handled automatically
+  END;
+  RETURN DEDUP(NORMALIZE(infile,LENGTH(LEFT.Rest),TakeOne(LEFT,COUNTER)));
+END;
+L := LOOP(Init,LENGTH(CleanedWord),Pluck1(ROWS(LEFT)));
+ValidWords := JOIN(L,File_Word_List,
+LEFT.SoFar=Std.Str.ToUpperCase(RIGHT.Word),TRANSFORM(LEFT));
+OUTPUT(CleanedWord);
+COUNT(ValidWords);
+OUTPUT(ValidWords)
+</programlisting></para>
+        </listitem>
+
+        <listitem>
+          <para>Selecione <emphasis role="bold">thor</emphasis> como seu cluster de
+        destino.</para>
+        </listitem>
+
+        <listitem>
+          <para>Pressione o botão de verificação de sintaxe localizado na barra de ferramentas principal (ou pressione
+        F7)</para>
+        </listitem>
+
+        <listitem>
+          <para>Pressione o botão <emphasis role="bold">Submit</emphasis><emphasis
+          role="bold"> </emphasis>.</para>
+        </listitem>
+
+        <listitem>
+          <para>Quando o envio estiver concluído, selecione a aba Workunit<emphasis role="bold">
+          </emphasis> e em seguida a aba Results.</para>
+        </listitem>
+
+        <listitem>
+          <para>Examine o resultado.</para>
+        </listitem>
+      </orderedlist></para>
+  </sect3>
+
+  <sect3 id="RoxieExample_CompileAndPublishtheQuery">
+    
+
+    <title>Compilar e Publicar a consulta para o Roxie</title>
+
+    
+
+    <para><orderedlist>
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Clique com o botão direito na pasta <emphasis role="bold">My Files</emphasis>
+          na janela Repository, e selecione a opção <emphasis
+          role="bold">Insert Folder</emphasis> no menu pop-up.</para>
+
+          <para><figure>
+              <title>Insert Folder</title>
+
+              <mediaobject>
+                <imageobject>
+                  <imagedata fileref="../../images/DTimg04.jpg" />
+                </imageobject>
+              </mediaobject>
+            </figure></para>
+        </listitem>
+
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Digite <emphasis role="bold">Anagram2</emphasis> para o rótulo
+          e pressione o botão OK.</para>
+
+          <para><figure>
+              <title>Inserir o título da pasta</title>
+
+              <mediaobject>
+                <imageobject>
+                  <imagedata fileref="../../images/VM1005.jpg" />
+                </imageobject>
+              </mediaobject>
+            </figure></para>
+        </listitem>
+
+        <listitem>
+          <para>Clique com o botão direito na pasta <emphasis role="bold">Anagram
+          </emphasis>e selecione <emphasis role="bold">Insert
+          File</emphasis> no menu pop-up.</para>
+        </listitem>
+
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Digite <emphasis role="bold">ValidateAnagrams</emphasis> para
+          o rótulo e pressione o botão
+          OK.</para>
+
+          <para>Uma janela do compilador será aberta.</para>
+
+          <para><figure>
+              <title>Janela do compilador</title>
+
+              <mediaobject>
+                <imageobject>
+                  <imagedata fileref="../../images/VM1006.jpg" />
+                </imageobject>
+              </mediaobject>
+            </figure></para>
+        </listitem>
+
+        <listitem>
+          <para>Escreva o seguinte código (ele pode ser copiado de outra
+          janela do compilador):<programlisting>IMPORT Std;
+layout_word_list := record
+  string word;
+end;
+File_Word_List := dataset('~thor::word_list_csv', layout_word_list,
+                          CSV(heading(1),separator(','),quote('')));
+STRING Word := 'teacher' :STORED('Word');
+STRING SortString(STRING input) := FUNCTION
+  OneChar := RECORD
+    STRING c;
+  END;
+  OneChar MakeSingle(OneChar L, unsigned pos) := TRANSFORM
+    SELF.c := L.c[pos];
+  END;
+  Split := NORMALIZE(DATASET([input],OneChar), LENGTH(input),
+  MakeSingle(LEFT,COUNTER));
+  SortedSplit := SORT(Split, c);
+  OneChar Recombine(OneChar L, OneChar R) := TRANSFORM
+    SELF.c := L.c+R.c;
+  END;
+  Recombined := ROLLUP(SortedSplit, Recombine(LEFT, RIGHT),ALL);
+  RETURN Recombined[1].c;
+END;
+
+STRING CleanedWord := SortString(TRIM(Std.Str.ToUpperCase(Word)));
+
+R := RECORD
+  STRING SoFar {MAXLENGTH(200)};
+  STRING Rest {MAXLENGTH(200)};
+END;
+Init := DATASET([{'',CleanedWord}],R);
+R Pluck1(DATASET(R) infile) := FUNCTION
+  R TakeOne(R le, UNSIGNED1 c) := TRANSFORM
+    SELF.SoFar := le.SoFar + le.Rest[c];
+    SELF.Rest := le.Rest[..c-1]+le.Rest[c+1..];
+    // Boundary Conditions
+    // handled automatically
+  END;
+  RETURN DEDUP(NORMALIZE(infile,LENGTH(LEFT.Rest),TakeOne(LEFT,COUNTER)));
+END;
+L := LOOP(Init,LENGTH(CleanedWord),Pluck1(ROWS(LEFT)));
+ValidWords := JOIN(L,File_Word_List,
+LEFT.SoFar=Std.Str.ToUpperCase(RIGHT.Word),TRANSFORM(LEFT));
+OUTPUT(CleanedWord);
+COUNT(ValidWords);
+OUTPUT(ValidWords)
+</programlisting></para>
+        </listitem>
+
+        <listitem>
+          <para>Selecione <emphasis role="bold">Roxie</emphasis> como seu cluster de
+        destino.</para>
+        </listitem>
+
+        <listitem>
+          <para>Pressione o botão de verificação de sintaxe localizado na barra de ferramentas principal (ou pressione
+        F7)</para>
+        </listitem>
+
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Na janela do compilador, no canto superior esquerdo <emphasis
+          role="bold">do botão Submit</emphasis> há uma seta suspensa ao
+          lado. Selecione a seta para exibir a opção <emphasis role="bold">Compilar</emphasis>
+          .</para>
+
+          <figure>
+            
+
+            <title>Compilar</title>
+
+            
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/DTimg17.jpg" />
+              </imageobject>
+            </mediaobject>
+          </figure>
+        </listitem>
+
+        <listitem>
+          <para>Selecione <emphasis role="bold">Compilar</emphasis></para>
+        </listitem>
+
+        <listitem>
+          <para>Quando o envio estiver concluído, selecione a aba Workunit<emphasis role="bold">
+          </emphasis> e em seguida a aba Results.</para>
+        </listitem>
+
+        <listitem>
+          <?dbfo keep-together="always"?>
+
+          <para>Quando a workunit for concluída, ela exibirá um círculo verde
+          indicando que foi compilada.</para>
+
+          <para><figure>
+              <title>Compilada</title>
+
+              <mediaobject>
+                <imageobject>
+                  <imagedata fileref="../../images/VM1007.jpg" />
+                </imageobject>
+              </mediaobject>
+            </figure></para>
+        </listitem>
+      </orderedlist></para>
+  </sect3>
+
+  <sect3 id="Deploy_the_Query_to_Roxie">
+    
+
+    <title>Publicar uma consulta Roxie</title>
+
+    
+
+    <para>Agora vamos publicar a consulta em um cluster Roxie.</para>
+
+    <orderedlist>
+      <listitem>
+        <para>Selecione a aba workunit para o ValidateAnagrams que você acabou de
+        compilar.</para>
+      </listitem>
+
+      <listitem>
+        <para>Selecionar a aba
+        ECLWatch.</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Pressione o botão <emphasis role="bold">Publish</emphasis> ,
+        preencha a caixa de diálogo e pressione o botão <emphasis
+        role="bold">Submit</emphasis>.</para>
+
+        <para><figure>
+            <title>Publicar Consulta</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/VM1008.jpg" />
+              </imageobject>
+            </mediaobject>
+          </figure>Uma mensagem de confirmação será exibida quando a consulta for publicada
+        com sucesso.</para>
+      </listitem>
+    </orderedlist>
+  </sect3>
+
+  <sect3 id="Run_the_Roxie_Query">
+    
+
+    <title>Executar a consulta Roxie no WsECL</title>
+
+    
+
+    <para>Agora que a consulta foi publicada em um cluster Roxie, podemos executá-la
+    usando o serviço WsECL. WsECL é uma interface Web para consultas em uma
+    plataforma do HPCC . Use a seguinte URL:</para>
+
+    <para><emphasis role="bold">http://nnn.nnn.nnn.nnn:pppp (onde
+    nnnn.nnn.nnn.nnn é o endereço
+    IP do seu ESP Server e pppp é a porta. A
+    porta padrão é 8002)</emphasis></para>
+
+    <orderedlist>
+      <listitem>
+        <para>Clique no sinal + ao lado de <emphasis
+        role="bold">myroxie</emphasis> para expandir a árvore.</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Clique no link <emphasis role="bold">ValidateAnagrams.1</emphasis>
+        .</para>
+
+        <para>O formulário do serviço será exibido.</para>
+
+        <para><figure>
+            <title>RoxieECL</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/VM1009.jpg" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+      </listitem>
+
+      <listitem>
+        <para>Selecione Tabelas de resultado (Output Tables) na lista suspensa.</para>
+      </listitem>
+
+      <listitem>
+        <?dbfo keep-together="always"?>
+
+        <para>Forneça uma palavra para que seja feito o anagrama (p.ex., TEACHER)
+        e pressione o botão Submit.</para>
+
+        <para>Os resultados serão exibidos.</para>
+
+        <para><figure>
+            <title>RoxieResults</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="../../images/VM1010.jpg" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+      </listitem>
+    </orderedlist>
+  </sect3>
+</sect2>

+ 2 - 0
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/hpcc_ldap.xml

@@ -833,6 +833,8 @@ Proceed?  y/n
       role="bold">daliconf.xml</emphasis>, por exemplo:</para>
 
       <para><programlisting>/opt/HPCCSystems/bin/addScopes /var/lib/HPCCSystems/mydali/daliconf.xml</programlisting></para>
+
+      <para>Execute o addScopes no nó do Dali.</para>
     </sect3>
   </sect2>
 </sect1>

+ 4 - 8
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml

@@ -335,10 +335,6 @@
                   <row>
                     <entry><itemizedlist>
                         <listitem>
-                          <para>Python : pyembed</para>
-                        </listitem>
-
-                        <listitem>
                           <para>JAVA : javaembed</para>
                         </listitem>
 
@@ -377,8 +373,8 @@
               </tgroup>
             </informaltable></para>
 
-          <para>Outras tecnologias, como suporte ao Cassandra
-          (cassandraembed), estão incluídas no pacote da plataforma.</para>
+          <para>Outras tecnologias, como suporte ao Cassandra e Python estão
+          incluídas no pacote da plataforma.</para>
         </sect3>
       </sect2>
 
@@ -3012,7 +3008,7 @@ sudo /etc/init.d/hpcc-init -c esp start
 
       <itemizedlist>
         <listitem>
-          <para>C++ (suporte completo já está embutido)</para>
+          <para>C++ (suporte completo já está incluso)</para>
         </listitem>
 
         <listitem>
@@ -3024,7 +3020,7 @@ sudo /etc/init.d/hpcc-init -c esp start
         </listitem>
 
         <listitem>
-          <para>Python</para>
+          <para>Python (suporte completo já está incluso)</para>
         </listitem>
 
         <listitem>

+ 17 - 0
docs/PT_BR/WsSQLUG/CMakeLists.txt

@@ -0,0 +1,17 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2019 HPCC Systems®.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+################################################################################
+get_filename_component(DOC_DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../BuildTools/cmake_config/${DOC_DIR_NAME}.txt)

Різницю між файлами не показано, бо вона завелика
+ 3902 - 0
docs/PT_BR/WsSQLUG/WsSQL_ESPWebServiceGuide.xml


+ 1 - 0
ecl/hql/hqlexpr.cpp

@@ -4665,6 +4665,7 @@ switch (op)
         assertex(queryChild(0)->isDictionary());
         break;
     case no_newusertable:
+    case no_newkeyindex:
         assertex(queryChild(2)->getOperator() == no_newtransform);
         break;
     }

+ 2 - 7
ecl/hql/hqlgram2.cpp

@@ -7173,12 +7173,7 @@ IHqlExpression * HqlGram::createBuildIndexFromIndex(attribute & indexAttr, attri
         transform.setown(createDefaultAssignTransform(record, sourceDataset->queryNormalizedSelector(), indexAttr));
         //The transform operator must be changed to no_newtransform since it will be an argument to no_newusertable
         if (transform->getOperator() == no_transform)
-        {
-            HqlExprArray args;
-            unwindChildren(args, transform);
-            OwnedHqlExpr newTransform = createValue(no_newtransform, transform->getType(), args);
-            transform.swap(newTransform);
-        }
+            transform.setown(replaceOperator(transform, no_newtransform));
     }
 
     //need to tag record scope in this case so it generates no_activetable as top selector
@@ -7964,7 +7959,7 @@ IHqlExpression * HqlGram::createIndexFromRecord(IHqlExpression * record, IHqlExp
     finalRecord.setown(cleanIndexRecord(finalRecord));
 
     OwnedHqlExpr transform = createClearTransform(finalRecord, errpos);
-    return createDataset(no_newkeyindex, ds, createComma(LINK(finalRecord), transform.getClear(), newAttrs.getClear()));
+    return createDataset(no_newkeyindex, ds, createComma(LINK(finalRecord), replaceOperator(transform, no_newtransform), newAttrs.getClear()));
 }
 
 

+ 7 - 0
ecl/hql/hqlutil.cpp

@@ -5566,6 +5566,13 @@ bool hasOperand(IHqlExpression * expr, IHqlExpression * child)
     return false;
 }
 
+IHqlExpression * replaceOperator(IHqlExpression * expr, node_operator newOp)
+{
+    HqlExprArray args;
+    unwindChildren(args, expr);
+    return createWrapper(newOp, expr->queryType(), args);
+}
+
 //-------------------------------------------------------------------------------------------------------
 
 class HQL_API SplitDatasetAttributeTransformer : public NewHqlTransformer

+ 1 - 0
ecl/hql/hqlutil.hpp

@@ -201,6 +201,7 @@ extern HQL_API IHqlExpression * removeAttribute(IHqlExpression * expr, IAtom * a
 extern HQL_API IHqlExpression * removeOperand(IHqlExpression * expr, IHqlExpression * operand);
 extern HQL_API IHqlExpression * removeChildOp(IHqlExpression * expr, node_operator op);
 extern HQL_API IHqlExpression * removeChild(IHqlExpression * expr, unsigned child);
+extern HQL_API IHqlExpression * replaceOperator(IHqlExpression * expr, node_operator newOp);
 extern HQL_API IHqlExpression * appendAttribute(IHqlExpression * expr, IAtom * attr);
 extern HQL_API IHqlExpression * appendOwnedOperand(IHqlExpression * expr, IHqlExpression * ownedOperand);
 extern HQL_API IHqlExpression * prependOwnedOperand(IHqlExpression * expr, IHqlExpression * ownedOperand);

+ 0 - 3
ecl/hthor/hthor.cpp

@@ -8254,9 +8254,6 @@ void CHThorDiskReadBaseActivity::gatherInfo(IFileDescriptor * fileDesc)
         compressed = fileDesc->isCompressed(&blockcompressed); //try new decompression, fall back to old unless marked as block
         if (fixedDiskRecordSize)
         {
-            size32_t dfsSize = fileDesc->queryProperties().getPropInt("@recordSize");
-            if (!((dfsSize == 0) || (dfsSize == fixedDiskRecordSize) || (grouped && (dfsSize+1 == fixedDiskRecordSize)))) //third option for backwards compatibility, as hthor used to publish @recordSize not including the grouping byte
-                throw MakeStringException(0, "Published record size %d for file %s does not match coded record size %d", dfsSize, mangledHelperFileName.str(), fixedDiskRecordSize);
             if (!compressed && (((helper.getFlags() & TDXcompress) != 0) && (fixedDiskRecordSize >= MIN_ROWCOMPRESS_RECSIZE)))
             {
                 StringBuffer msg;

+ 20 - 0
ecl/regress/issue22822.ecl

@@ -0,0 +1,20 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2019 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+DataRec := {UNSIGNED4 n, UNSIGNED4 v};
+oldIDX := INDEX({DataRec.n}, {DataRec}, '~dcamper::test_idx_1');
+BUILD(oldIDX);

+ 1 - 1
esp/src/eclwatch/templates/GraphTree7Widget.html

@@ -43,7 +43,7 @@
                                 <div data-dojo-type="dijit.Fieldset">
                                     <legend>${i18n.Edges}</legend>
                                     <div data-dojo-type="hpcc.TableContainer">
-                                        <input title="${i18n.Label}:" name="elabel" value="%Label%\n%NumRowsProcessed%\n%SkewMinRowsProcessed% - %SkewMaxRowsProcessed%" style="width: 95%;" data-dojo-props="trim: true" data-dojo-type="dijit.form.TextBox" />
+                                        <input title="${i18n.Label}:" name="elabel" value="%Label%\n%NumRowsProcessed%\n%SkewMinRowsProcessed% / %SkewMaxRowsProcessed%" style="width: 95%;" data-dojo-props="trim: true" data-dojo-type="dijit.form.TextBox" />
                                     </div>
                                 </div>
                                 <div class="dijitDialogPaneActionBar">

+ 1 - 1
esp/src/src/WUScopeController.ts

@@ -142,7 +142,7 @@ export class WUScopeController {
         return this;
     }
 
-    _edgeLabelTpl = "%Label%\n%NumRowsProcessed%\n%SkewMinRowsProcessed% - %SkewMaxRowsProcessed%";
+    _edgeLabelTpl = "%Label%\n%NumRowsProcessed%\n%SkewMinRowsProcessed% / %SkewMaxRowsProcessed%";
     edgeLabelTpl(): string;
     edgeLabelTpl(_: string): this;
     edgeLabelTpl(_?: string): string | this {

+ 5 - 2
system/jlib/jptree.cpp

@@ -3241,13 +3241,16 @@ void CAtomPTree::setAttribute(const char *key, const char *val)
     {
         CriticalBlock block(hashcrit);
         AttrValue *newattrs = newAttrArray(numAttrs+1);
-        memcpy(newattrs, attrs, numAttrs*sizeof(AttrValue));
+        if (attrs)
+        {
+            memcpy(newattrs, attrs, numAttrs*sizeof(AttrValue));
+            freeAttrArray(attrs, numAttrs);
+        }
         v = &newattrs[numAttrs];
         if (!v->key.set(key))
             v->key.setPtr(attrHT->addkey(key, isnocase()));
         if (!v->value.set(val))
             v->value.setPtr(attrHT->addval(val));
-        freeAttrArray(attrs, numAttrs);
         numAttrs++;
         attrs = newattrs;
     }

+ 12 - 0
testing/regress/ecl/key/translatefixed.xml

@@ -0,0 +1,12 @@
+<Dataset name='Result 1'>
+</Dataset>
+<Dataset name='Result 2'>
+ <Row><fname>john       </fname></Row>
+ <Row><fname>peter      </fname></Row>
+ <Row><fname>greg       </fname></Row>
+ <Row><fname>paul       </fname></Row>
+ <Row><fname>christian  </fname></Row>
+</Dataset>
+<Dataset name='Result 3'>
+ <Row><Result_3>5</Result_3></Row>
+</Dataset>

+ 33 - 0
testing/regress/ecl/translatefixed.ecl

@@ -0,0 +1,33 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2019 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+import $.Setup;
+import Std;
+
+prefix := Setup.Files(false, false).QueryFilePrefix;
+
+ds := DATASET([{'john'}, {'peter'}, {'greg'}, {'paul'}, {'christian'}], { string10 fname; });
+
+tmpFName := prefix+'tmp';
+extDs := DATASET(tmpFName, { string11 fname; }, FLAT);
+
+SEQUENTIAL(
+ OUTPUT(ds, , tmpFName);
+ OUTPUT(extDs);
+ COUNT(extDs);
+ Std.File.DeleteLogicalFile(tmpFName);
+);

+ 0 - 14
thorlcr/activities/diskread/thdiskreadslave.cpp

@@ -392,20 +392,6 @@ void CDiskRecordPartHandler::open()
         if (!partStream)
             throw MakeActivityException(&activity, 0, "Failed to open file '%s'", filename.get());
         ActPrintLog(&activity, "%s[part=%d]: %s (%s)", kindStr, which, activity.isFixedDiskWidth ? "fixed" : "variable", filename.get());
-        if (activity.isFixedDiskWidth)
-        {
-            if (!compressed || blockCompressed)
-            {
-                unsigned fixedSize = activity.diskRowMinSz;
-                if (partDesc->queryProperties().hasProp("@size"))
-                {
-                    offset_t lsize = partDesc->queryProperties().getPropInt64("@size");
-                    if (0 != lsize % fixedSize)
-                        throw MakeActivityException(&activity, TE_BadFileLength, "Fixed length file %s [DFS size=%" I64F "d] is not a multiple of fixed record size : %d", filename.get(), lsize, fixedSize);
-                }
-            }
-        }
-
         partStream->setFilters(activity.fieldFilters);
     }
 

+ 62 - 10
thorlcr/master/thmastermain.cpp

@@ -441,9 +441,63 @@ bool checkClusterRelicateDAFS(IGroup &grp)
 
 static bool auditStartLogged = false;
 
+class CThorEndHandler : public CSimpleInterface, implements IThreaded
+{
+    CThreaded threaded;
+    unsigned timeout = 30000;
+    std::atomic<bool> started{false};
+    std::atomic<bool> stopped{false};
+    Semaphore sem;
+public:
+    CThorEndHandler() : threaded("CThorEndHandler")
+    {
+        threaded.init(this);
+    }
+    ~CThorEndHandler()
+    {
+        stop();
+        threaded.join(timeout);
+    }
+    void start(unsigned timeoutSecs)
+    {
+        bool expected = false;
+        if (started.compare_exchange_strong(expected, true));
+        {
+            timeout = timeoutSecs * 1000; // sem_post and sem_wait are mem_barriers
+            sem.signal();
+        }
+    }
+    void stop()
+    {
+        bool expected = false;
+        if (stopped.compare_exchange_strong(expected, true));
+            sem.signal();
+    }
+    virtual void threadmain() override
+    {
+        // wait to be signalled to start timer
+        sem.wait();
+        if (stopped)
+            return;
+        if (!sem.wait(timeout))
+        {
+            // if it wasn't set by now then it's -1 and Thor restarts ...
+            int eCode = queryExitCode();
+            _exit(eCode);
+        }
+    }
+};
+// start thread now
+static CThorEndHandler thorEndHandler;
+
 static bool firstCtrlC = true;
 bool ControlHandler(ahType type)
 {
+    // MCK - NOTE: this routine may make calls to non-async-signal safe functions
+    //             (such as malloc) that really should not be made if we are called
+    //             from a signal handler - start end handler timer to always end
+    thorEndHandler.start(120);
+
     if (ahInterrupt == type)
     {
         if (firstCtrlC)
@@ -470,14 +524,7 @@ bool ControlHandler(ahType type)
                     queryServerStatus().queryProperties()->queryProp("@queue"));
             }
             queryLogMsgManager()->flushQueue(10*1000);
-#ifdef _WIN32
-            TerminateProcess(GetCurrentProcess(), 1);
-#else
-            //MORE- verify this
-            // why not just raise(SIGKILL);  ?
-            kill(getpid(), SIGKILL);
-#endif
-            _exit(1);
+            _exit(TEC_CtrlC);
         }
     }
     // ahTerminate
@@ -842,11 +889,16 @@ int main( int argc, char *argv[]  )
         FLLOG(MCexception(e), thorJob, e,"ThorMaster");
         e->Release();
     }
+
+    // cleanup handler to be sure we end
+    thorEndHandler.start(30);
+
+    PROGLOG("Thor closing down 5");
     stopPerformanceMonitor();
     disconnectLogMsgManagerFromDali();
     closeThorServerStatus();
-    if (globals) globals->Release();
-    PROGLOG("Thor closing down 5");
+    if (globals)
+        globals->Release();
     PROGLOG("Thor closing down 4");
     closeDllServer();
     PROGLOG("Thor closing down 3");